SQL如何排除表中id存在于另一张表id列的对应行
SQL查询实现方案
以下三种写法都可以实现需求,无需提前手动整理要排除的ID值:
- 方法1:
NOT IN子查询
写法最直观,直接取Second_table的id集合作为排除范围:
SELECT id, occupation FROM First_table WHERE id NOT IN (SELECT id FROM Second_table);
注意:如果Second_table的id列存在NULL值,该写法会返回空结果,存在NULL场景建议使用下面两种方案
- 方法2:左连接 + 空值判断
通过左连接关联两张表后,筛选关联不到Second_table记录的行:
SELECT f.id, f.occupation FROM First_table f LEFT JOIN Second_table s ON f.id = s.id WHERE s.id IS NULL;
该写法兼容性极强,所有主流SQL数据库都支持。
- 方法3:
NOT EXISTS子查询
通过存在性判断筛选,多数数据库中该写法的执行性能优于NOT IN:
SELECT id, occupation FROM First_table f WHERE NOT EXISTS ( SELECT 1 FROM Second_table s WHERE s.id = f.id );
内容的提问来源于stack exchange,提问作者Ben Nicholl
相关产品推荐
相关产品推荐

