我们学校的ERP有一个令人讨厌的数据库结构,因为它没有正确规范化,我有一个多次加入同一个表的问题。
DegreeHistory表将这些列放在一个人的一行条目中:
|Major1|Major2|Major3|Minor1|Minor2|Minor3|
-------|------|------|------|------|------|
CMPT BUSI
还有另一张表DegDescription:
|DegreeCode|DegreeDesc |
-----------|-----------------
CMPT |Computer Science
BUSI |Business
我希望查询显示学生的学位历史信息,但会跳过学位代码并显示学位描述。有没有办法可以做到这一点:
SELECT dd.DegreeDesc, dd1.DegreeDesc FROM DegreeHistory dh
LEFT JOIN DegreeDescription dd ON dd.DegreeCode = dh.Major1
LEFT JOIN DegreeDescription dd1 ON dd1.DegreeCode = dh.Major2 ...
对于每个可能的专业,未成年人,集中,认证等...似乎是一个大而丑陋的查询(虽然很简单)。
答案 0 :(得分:1)
你走在正确的轨道上,只是稍微改变一下......:
SELECT dd.DegreeDesc, dd1.DegreeDesc FROM DegreeHistory dh
LEFT JOIN DegreeDescription ON DegreeCode = dh.Major1 dd
LEFT JOIN DegreeDescription ON DegreeCode = dh.Major2 dd1 ...
当然它很难看,但这就是非标准化结构的结果: - (