我有一个旧数据库,其中包含一些复杂的数据连接。如下所示
受试者
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多条记录,我必须根据这些新表合并它们。
答案 0 :(得分:0)
假设这是一次性的数据转换,并且您已经填充了新的结果表,那么下面的简单操作就可以了:
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
这不是一个非常优雅的解决方案,但它不需要进行一次性转换。