尝试了SQL选择谁注册和未注册的模块
问题描述:
转到学生的一些属性链接来查看表 表链接:https://www.scribd.com/document/357739284/DBDI-Relational-Schema-Data尝试了SQL选择谁注册和未注册的模块
我所试图做的事: 试图显示学生姓名,电子邮件,和的moduleId谁注册了一个模块,也谁是没有登记的的moduleId同一名单上显示的学生他们的结果
SQL我尝试了,但问题:
SELECT sName, email, Module.moduleID, Module.results
FROM Student, Module, Registration
WHERE Student.studentID = Registration.studentID AND ModuleID.moduleID = Registration.moduleID
UNION
SELECT sName, email, Module.moduleID, Module.results
FROM student
LEFT JOIN Registration ON Student.studentID = Registration. StudentID
WHERE Registration.moduleID IS NULL;
答
最后左连接中的点(。)和StudentID之间存在一个空格。该空间需要被删除,如下所示。我还将上部查询更改为ANSI标准语法以与底部查询保持一致。在上面的查询中,模块表被错误地命名为ModuleID。 Student和Module之间的连接键不正确。更正为StudentID。
SELECT sName, email, Module.moduleID, Registration.results
FROM Student --<-- changed to ANSI Standard syntax
INNER JOIN Registration on Student.studentID = Registration.studentID
INNER JOIN Module on Registration.ModuleID = Module.ModuleID --< Fixed Module table name
UNION
SELECT sName, email, Registration.moduleID, Registration.results
FROM Student
LEFT JOIN Registration ON Student.StudentID = Registration.StudentID
WHERE Registration.ModuleID IS NULL;
仍然得到一个小错误。选择线下UNION说无效的标识符 –
@Anthony你需要注意列的存储位置。你在混合导致问题的列和表。 – LAS