SQL查询使用NULL

时间:2016-03-06 03:04:59

标签: sql postgresql

我有两张桌子,学生和学校。

学生

SocketFactory factory = SSLSocketFactory.getDefault(); 

学校

stid | stname | schid |  status   

临时学生的状态可以很多,但永久学生可以schid | schname

如何列出没有临时学生的学校名称?

3 个答案:

答案 0 :(得分:2)

您可以使用not exists仅选择没有临时学生的学校:

select * from school s
where not exists (
    select 1 from student s2
    where s2.schid = s.schid
    and s2.status is not null
)

答案 1 :(得分:2)

使用Conditional Aggregate,您可以计算每个permanent studentschool的数量。

如果学校的总数与学校的条件数相同,那么学校没有temporary students

使用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(*) 

使用EXISTS

的另一种方法
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(*)) 

答案 2 :(得分:0)

您可以使用常规联接。

SELECT DISTINCT c.schName
FROM Students s
INNER JOIN Schools c ON s.schid = c.schid
WHERE s.status IS NULL