【发布时间】:2013-11-30 22:11:08
【问题描述】:
我正在使用 SQL Server。我发现自己在 WHERE 子句中使用以下语法进行复杂查询:
SELECT ..
WHERE StudentID IS NULL OR StudentID NOT IN (SELECT StudentID from Students)
想知道是否有更好的方法/更清洁的方法来替换它,因为这是我正在执行的更大查询的一个小示例,其中包含多个类似的条件。
如您所见,我正在尝试为特定列过滤其列值为 null 或无效 id 的行。
编辑
课程:
|CourseID | StudentID | StudentID2|
|-----------------------------------|
| 1 | 100 | NULL |
| 2 | NULL | 200 |
| 3 | 1 | 1 |
学生
|StudentID | Name |
|--------------------
| 1 | A |
| 2 | B |
| 3 | C |
查询:
SELECT CourseID
FROM Courses
WHERE
StudentID IS NULL OR StudentID NOT IN (SELECT * FROM Students)
OR StudentID2 IS NULL OR StudentID2 NOT IN (SELECT * FROM Students)
结果:
| CourseID |
|-----------|
| 1 |
| 2 |
如您所见,课程 1 和 2 的学生无效。
【问题讨论】:
-
StudentId可以是非空的,但它不是学生,那你为什么需要子查询呢? -
这些信息太少,无法真正帮助您。考虑添加该选择的功能示例,其中包含表结构、示例数据和预期输出。
-
同时告诉我们您正在使用哪个 DBMS。后格雷斯?甲骨文?
-
我已经用表格示例编辑了我的问题,希望你能提供帮助
标签: sql sql-server where