查询无员工的Branch分支:现有SQL语句有误,求正确实现方法
查询无员工的分支(Branch)解决方案
原SQL语句的问题
- 使用内连接(JOIN):内连接仅返回两张表中匹配的记录,也就是存在员工的分支,因此无法获取无员工的分支。
WHERE branchNo < 1条件逻辑错误:分支编号通常为正整数,该条件会过滤掉所有有效分支,导致结果为空。
正确的SQL写法
方法1:左连接(LEFT JOIN)+ IS NULL
左连接会保留Branch表的所有记录,当Staff表中无匹配的分支编号时,对应员工表的字段会为NULL,以此筛选目标数据:
SELECT a.branchNo, a.city FROM Branch a LEFT JOIN Staff b ON a.branchNo = b.branchNo WHERE b.branchNo IS NULL;
方法2:NOT EXISTS子查询
通过子查询检查当前分支是否不存在对应的员工记录,不存在则返回该分支:
SELECT branchNo, city FROM Branch a WHERE NOT EXISTS ( SELECT 1 FROM Staff b WHERE b.branchNo = a.branchNo );
方法3:NOT IN子查询
先提取所有有员工的分支编号,再筛选出不在该列表中的分支(注意排除NULL值避免逻辑失效):
SELECT branchNo, city FROM Branch WHERE branchNo NOT IN ( SELECT DISTINCT branchNo FROM Staff WHERE branchNo IS NOT NULL );
内容的提问来源于stack exchange,提问作者Kevin Callejas
相关产品推荐
相关产品推荐

