我有一个旧的数据库,有一些复杂的数据连接。如下所示
科目
Id Name
-------------------------------
1 Math
2 Science
3 English
结果
Id StudentId Math MathMax Science ScienceMax English EnglishMax TotalMarks Max
-----------------------------------------------------------------------------------------
1 81 5 10 6 10 3 10 14 30
2 82 8 10 8 10 9 10 25 30
3 83 7 10 8 10 7 10 22 30
现在,我正在尝试将其转换为更简单、更易读的数据库。所以我想出了像结果这样的表
ResultId StudentId TotalMarks MaxMarks
-------------------------------------------
1 81 14 30
2 82 25 30
3 83 22 30
ResultDetails
Id ResultId SubjectId Marks MaxMarks
--------------------------------------------------------
1 1 1 5 10
2 1 2 6 10
3 1 3 7 10
& so one
现在真正的问题是,我可以在新的结果表中插入数据,但我对第二个表感到困惑。我不明白如何传递一个表的列名,并从第二个表中获取该名称的id并将其插入第三个表中。我正在尝试,但无法理解实现这一目标的正确命令。我的数据库已经有了50000+记录,我必须根据这个新表合并它们。
发布于 2014-12-16 16:48:33
假设这是一次过的数据转换,并且已经填充了新的结果表,下面这样简单的内容应该可以工作:
INSERT INTO ResultDetails(ResultId, SubjectId, Marks, MaxMarks)
SELECT
R.StudentId,
1 AS SubjectId,
OldR.Math AS Marks,
OldR.MathMax AS MaxMarks
FROM Results R
INNER JOIN OldResults OldR ON R.StudentId = OldR.StudentId
INSERT INTO ResultDetails(ResultId, SubjectId, Marks, MaxMarks)
SELECT
R.StudentId,
2 AS SubjectId,
OldR.Science AS Marks,
OldR.ScienceMax AS MaxMarks
FROM Results R
INNER JOIN OldResults OldR ON R.StudentId = OldR.StudentId
INSERT INTO ResultDetails(ResultId, SubjectId, Marks, MaxMarks)
SELECT
R.StudentId,
3 AS SubjectId,
OldR.English AS Marks,
OldR.EnglishMax AS MaxMarks
FROM Results R
INNER JOIN OldResults OldR ON R.StudentId = OldR.StudentId这不是一个非常优雅的解决方案,但它不需要进行一次性转换。
https://stackoverflow.com/questions/27509525
复制相似问题