我有两张桌子:
表1
[schoolName] [Track] [Student Name] [Program ID]
ABC 103 joe 1
ABC 101 Edward 2
QWE 103 Adam 5
QWE 103 Ben 1
表2
[SchoolName] [Program ID] [Class ID] [Class Name]
ABC 1 1 Science
ABC 1 2 Math
ABC 1 3 History
ABC 2 1 Science
QWE 5 1 Science
QWE 5 2 Math
QWE 1 2 Math
选择参加第103号课程的学生姓名不包括第3课,并为其班级名称返回NULL,如下所示:
[schoolName] [Track] [Student Name] [Program ID] [Class Name]
QWE 103 Adam 5 NULL
QWE 103 Ben 1 NULL
尝试以下查询但不起作用:
select Table1.[schoolName], Table1.[Track], Table1.[Student Name], Table1.[Program ID], Table2.[Class Name]
from table1, table2
where Table1.[schoolName]=Table2.[SchoolName]
and Table1.[Program ID]=Table2.[Program ID]
and Table1.[Track]=103
and Table2.[Class ID] = 3
OR Table2.[Class ID] IS NULL
我在这里做错了什么?
答案 0 :(得分:1)
首先,我非常怀疑您使用的是MySQL
还是Oracle
。使用[]
进行引用是特定于SQL Server的。
选择参加第103号课程的学生姓名,不包括第3课,并为其班级名称返回NULL
您可以首先获取table1
track
为103的所有记录,并使用相关子查询来消除程序包含class id
= 3的行:
SELECT T1.[schoolName],
T1.[Track],
T1.[Student Name],
T1.[Program ID],
NULL AS [Class Name]
FROM table1 T1
WHERE T1.[Track] = 103
AND NOT EXISTS (SELECT 1
FROM table2 T2
WHERE T1.[SchoolName] = T2.[SchoolName]
AND T1.[Program ID] = T2.[Program ID]
AND T2.[Class ID] = 3);
的 LiveDemo
强>
考虑使用没有空格的列名,例如Program_ID, Class_ID
等等。