2017-08-31 85 views
0

转到学生的一些属性链接来查看表 表链接: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; 

回答

0

最后左连接中的点(。)和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; 
+0

仍然得到一个小错误。选择线下UNION说无效的标识符 –

+0

@Anthony你需要注意列的存储位置。你在混合导致问题的列和表。 – LAS