使用NULL的SQL查询
我有两张桌子,学生桌和学校桌 学生使用NULL的SQL查询,sql,postgresql,Sql,Postgresql,我有两张桌子,学生桌和学校桌 学生 stid | stname | schid | status 学校 schid | schname 对于临时学生,状态可以是很多,但是对于永久学生,状态可以是NULL 如何列出没有临时学生的学校名称 您可以使用不存在仅选择没有临时学生的学校: select * from school s where not exists ( select 1 from student s2 where s2.schid = s.schid
stid | stname | schid | status
学校
schid | schname
对于临时学生,状态可以是很多,但是对于永久学生,状态可以是NULL
如何列出没有临时学生的学校名称 您可以使用
不存在
仅选择没有临时学生的学校:
select * from school s
where not exists (
select 1 from student s2
where s2.schid = s.schid
and s2.status is not null
)
使用
条件聚合
可以计算每个学校
中的永久学生
如果一所学校的总人数与一所学校的有条件人数相同,则该学校没有任何临时学生
使用JOIN
SELECT sc.schid,
sc.schname
FROM student s
JOIN school sc
ON s.schid = sc.schid
GROUP BY sc.schid,
sc.schname
HAVING( CASE WHEN status IS NULL THEN 1 END ) = Count(*)
存在另一种使用的方法
SELECT sc.schid,
sc.schname
FROM school sc
WHERE EXISTS (SELECT 1
FROM student s
WHERE s.schid = sc.schid
HAVING( CASE WHEN status IS NULL THEN 1 END ) = Count(*))
您可以使用常规联接
SELECT DISTINCT c.schName
FROM Students s
INNER JOIN Schools c ON s.schid = c.schid
WHERE s.status IS NULL
这将使学校既有临时学生,也有永久学生,这将不会产生结果。这将只包括学生身份为空的学校,而DISTINCE将只选择学生为永久学生的学校。此查询有效。此查询返回至少有一名永久学生的学校。这并不是说没有一个是暂时的。