Mysql SQLite查询以获取二维国家记录(学生与测验)
我是sqlite的新手,我有三张桌子,学生,测验和成绩表。我希望使用单个sqlite查询在CVS中写入所有数据。我想从代码中删除循环和条件的倍数,并处理单个查询。我在sql中创建了查询,但我不明白它在SQLlite中应该是怎样的。这看起来像是二维的(学生数量与测验数量)。 学生表:Mysql SQLite查询以获取二维国家记录(学生与测验),mysql,sql,database,sqlite,Mysql,Sql,Database,Sqlite,我是sqlite的新手,我有三张桌子,学生,测验和成绩表。我希望使用单个sqlite查询在CVS中写入所有数据。我想从代码中删除循环和条件的倍数,并处理单个查询。我在sql中创建了查询,但我不明白它在SQLlite中应该是怎样的。这看起来像是二维的(学生数量与测验数量)。 学生表: Id | StudentId | Name 1 | 001 | ABC 2 | 002 | EFG 3 | 003 | XYZ 测验表: QId |Tot
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中,与仅在代码中编写逻辑相比,创建和删除表以及解释复杂查询的开销相对较大。你可以毫无问题地做到
另外,创建和删除表或任何数据只会使存储文件膨胀,因为SQLite在执行显式清理之前不会删除。@sagar,感谢格式化,如何格式化表?使用Ctrl+Shift+K@sagar谢谢。在我看来,您需要将数据导入输出