gpt4 book ai didi

mysql - SQLite查询获取两个维度记录(学生与测验)

转载 作者:搜寻专家 更新时间:2023-10-30 23:33:25 25 4
gpt4 key购买 nike

我是 sqlite 的新手,我有三个表,Students,quiz 和 mark sheet。我想用单个 sqlite 查询在 CVS 中写入所有数据。我想从代码中删除多个 for 循环和条件并处理单个查询。我在 sql 中创建了查询,但我不明白它应该如何在 SQLlite 中。它似乎是二维的(学生数量与测验数量)。学生表:

Id | StudentId | Name       
1 | 001 | ABC

2 | 002 | EFG

3 | 003 | XYZ

测验表:

QId |TotalMark | Question    

1 | 10 | ABC

2 | 10 | TUI

3 | 10 | LMP

标记表:

SId   | QID | Marks

001 | 1 | 4

002 | 1 | 6

003 | 1 | 7

001 | 2 | 5

002 | 2 | 6

003 | 2 | 7

001 | 3 | 9

002 | 3 | 6

003 | 3 | 7

要求的输出是:

Id | StudentId | Name | ABC | TUI|  LMP

1 | 001 | ABC | 4 | 5 | 6

2 | 002 | EFG | 4 | 5 | 6

3 | 003 | XYZ | 4 | 5 | 6

DROP TABLE H;
DROP TABLE T;
SELECT TOP 1
STUFF(( SELECT ', ' + M.title
FROM dbo.marksheet M
INNER JOIN marksheet_item MI ON M.marksheet_id = MI.marksheet_id
INNER JOIN dbo.student SS ON SS.stu_id = MI.stu_id
WHERE S.stu_id = SS.stu_id
FOR
XML PATH('')
), 1, 2, '') AS ReportHeader
INTO H
FROM student S
GROUP BY S.stu_id,S.stu_name;

SELECT MIN(stu_id) AS ID ,
S.stu_id ,S.stu_name,
STUFF(( SELECT ', ' + CAST(MI.marks AS VARCHAR(50))
FROM dbo.marksheet M
INNER JOIN marksheet_item MI ON M.marksheet_id = MI.marksheet_id
INNER JOIN dbo.student SS ON SS.stu_id = MI.stu_id
WHERE S.stu_id = SS.stu_id
FOR
XML PATH('')
), 1, 2, '') AS report
INTO t
FROM student S
GROUP BY S.stu_id,S.stu_name;

SELECT *FROM h;
SELECT *FROM t;

最佳答案

你不知道。

SQLite 在本地运行。因此没有网络延迟、很少有事务问题等,这就是您希望在典型的 DBMS 中避免多次查询而宁愿执行此类复杂语句的原因。

与仅在代码中编写逻辑相比,在 SQLite 中创建和删除表以及解释复杂查询的开销相对较大。你可以没有问题fire hundreds of queries select without running into performance issues .

同时创建和删除表或任何数据只会使存储文件膨胀,因为 SQLite 在您执行显式清理之前不会删除。

关于mysql - SQLite查询获取两个维度记录(学生与测验),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45937954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com