繁体   English   中英

帮助SQL查询返回不匹配的单元格

[英]Assistance with SQL query returning not matched cells

我有以下2表:

表格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

我在这里做错了什么?

首先,我非常怀疑您使用的是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等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM