我正在尝试编写一个SQL查询,该查询返回大学课程的模块编号及其标题列表,以及该模块及其标题的先决条件列表。这意味着输出应该类似于:
Module | Module Title | Prerequisite | Prerequisite Title
C1930 | Computing | C1100 | Basic Computing
C1930 | Computing | C1500 | Intermediate Computing
T1350 | Textiles | T1100 | Sewing
表格类型如下:
模块( moduleNumber ,moduleName);
先决条件( moduleNumber , prerequisiteNumber );
我的问题是将prerequisteNumber解析为moduleName。我可以看到它可能需要是子查询或使用某种类型的JOIN(INNER JOIN是我尝试过的方式),但我似乎无法让它工作。
我的查询尝试如下:
SELECT m.moduleNumber as "Module", m.moduleName as "Module Title", p.moduleNumber as "Prerequisite", p.prerequisiteNumber as "Prerequisite Title"
FROM Module m, Prerequisite p
WHERE p.moduleNumber = m.moduleNumber
OR p.prerequisiteNumber = m.moduleNumber
和
SELECT m.moduleNumber as "Module", m.moduleName as "Module Title", p.moduleNumber as "Prerequisite"
FROM Module m
INNER JOIN Prerequisite s
ON m.moduleNumber = p.moduleNumber
INNER JOIN
(
SELECT m.moduleName as "Prerequisite Title"
FROM Module m, Prerequisite p
WHERE m.moduleNumber = p.moduleNumber
)
这两者都没有为我提供我想要的结果。我觉得第一个比第二个更接近,但我似乎无法在其中任何一个方面取得进一步进展。我试过四处寻找,但我甚至不确定如何描述这个问题,更不用说从哪里开始寻求帮助了。
感谢您的时间。
修改
以下是模块和先决条件表的示例数据:
模块
moduleNumber | moduleName
C1930 | Computing
C1100 | Basic Computing
C1500 | Intermediate Computing
T1350 | Textiles
T1100 | Sewing
前提条件
moduleNumber | prerequisiteNumber
C1930 | C1100
C1930 | C1500
T1350 | T1100
答案 0 :(得分:1)
如果您的先决条件在Module表中,那么您可能正在寻找的是:
SELECT m.moduleNumber as "Module",
m.moduleName as "Module Title",
p.moduleNumber as "Prerequisite",
p.moduleName as "Prerequisite Title"
FROM Module m, Module p, Prerequisite mp
WHERE m.moduleNumber = pm.moduleNumber and p.moduleNumber = pm.prerequisiteNumber
使用旧的SQL或:
SELECT m.moduleNumber as "Module",
m.moduleName as "Module Title",
p.moduleNumber as "Prerequisite",
p.moduleName as "Prerequisite Title"
FROM Module m JOIN
Prerequisite mp ON m.moduleNumber = mp.moduleNumber JOIN
Module p ON p.moduleNumber = mp.prerequisiteNumber
使用ANSI SQL。