Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用NULL的SQL查询_Sql_Postgresql - Fatal编程技术网

使用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将只选择学生为永久学生的学校。此查询有效。此查询返回至少有一名永久学生的学校。这并不是说没有一个是暂时的。