sql查询也返回null

lsmepo6l  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(399)

我有两张table:
部门(没有行)(有两列:部门id和名称)
学生(有3列:id name department\u id)和两行:

23,"Alice",1
1,"Bob",7

我的查询是要返回学号和学生姓名时,系不存在。
我的问题是:

SELECT distinct s.id as id , s.name as name
FROM Departments d, Students s WHERE s.department_id NOT IN (select id from Departments)

该查询不返回任何行。如果两个部门都不存在,它不应该返回两行吗?
例如,如果department表有一行:

1, finance

然后查询工作正常并返回

7,Bob

因为爱丽丝的部门(id 1)现在已经存在了。

vyswwuz2

vyswwuz21#

因为你写了

FROM Departments d, Students s

这将在两个表之间创建一个叉积,然后使用 WHERE 条款。如果任一表为空,则叉积为空。
你不需要交叉积 Departments 如果你用的是 WHERE s.department_id NOT IN .

SELECT distinct s.id as id , s.name as name
FROM Students s WHERE s.department_id NOT IN (select id from Departments)
t40tm48m

t40tm48m2#

尝试此查询

SELECT s.name, s.department_id
FROM students s
LEFT JOIN departments d ON s.department_id = d.department_id
WHERE d.name IS NULL

left join返回student表中与departments表中的记录匹配的所有记录

相关问题