0

我有 2 个表格,其中存储了课程以及多年来对课程名称的更改

餐桌课程

year, record
2009, 'Basic English 101'
2009, 'Maths 100'
2010, 'Introduction to English 102'
2010, 'Maths 101'
2010, 'History 100'
2011, 'English 103'
2012, 'Maths 102'

表更改

year, oldrecord', 'newrecord' 
2010, 'Basic English 101', 'Introduction to English 102'
2010, 'Maths 100', 'Maths 101'
2011, 'Introduction to English 102', 'English 103' 
2012, 'English 103', 'English 104'
2012, 'Maths 101' 'Maths 102'

我想要的是多年来显示课程名称,

通过这个查询,我设法获得了 2009 年和 2010 年英语 101 的下一个记录

SELECT year, record AS coursename FROM courses 
WHERE record= 'Basic English 101'
UNION
SELECT Year, newrecord FROM changes 
WHERE newrecord = (SELECT newrecord FROM changes WHERE oldrecord='Basic English 101')

结果

year, coursename
2009, 'Basic English 101'
2010, 'Introduction to English 102'

我的问题是如何根据新记录的价值获得其他年份的记录?

我可以做另一个子查询,但如果课程分成 2 个,我会得到子查询返回多个行错误。

谢谢。

4

1 回答 1

0

您需要在两个表中添加一个唯一的 id 字段,该字段将链接课程而不依赖于名称。使用自动增量主键将其设为整数。

表课程应该只存储当前名称

year, record_id, record,
2010, 1, 'History 100'
2011, 2, 'English 103'
2012, 3, 'Maths 102'

表更改应参考相关的record_id

year, record_id, oldrecord, newrecord 
2010, 2, 'Basic English 101', 'Introduction to English 102'
2010, 3, 'Maths 100', 'Maths 101'
2011, 2, 'Introduction to English 102', 'English 103' 
2012, 2, 'English 103', 'English 104'
2012, 3, 'Maths 101' 'Maths 102'

然后,您可以通过执行以下操作来获得完整的历史记录,例如英语记录

SELECT oldrecord FROM changes WHERE record_id = 2
于 2012-04-03T21:28:55.247 回答