使用 NULL 的 SQL 查询

标签 sql postgresql

我有两张表,学生和学校。

学生

stid | stname | schid |  status   

学校

schid | schname

Status 对于临时学生来说可以是很多东西,但是对于永久学生来说是 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(*) 

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

关于使用 NULL 的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35822621/

相关文章:

sql - 如何将SQL语句的结果集存储到变量中?

MySQL 查询帮助...检查真假?

mysql - 哪个更好 : storing string including Unicode characters in NVARCHAR or VARCHAR?

php - 解决INSERT INTO语句的语法错误

sql - 清空自引用 MySQL 表的最佳方法是什么?

node.js - 向 json 列添加 json 数据是添加转义字符

java - PostgreSQL 创建 jdbc_fdw 扩展失败

ruby-on-rails - 初学者 Rails 部署到 Heroku

sql - 通过键和表达式组合行

sql - 带有 TimescaleDB 的 PostgreSQL 在索引创建期间仅使用单个核心