如何关联Emp表与Name表,输出匹配正确姓名或全量员工数据?
解决Emp表与Name表的匹配查询需求
需求说明
现有Emp表中同一员工ID对应多个姓名,Name表存储各ID对应的正确姓名,需实现:
- 若
Emp表的ID在Name表中存在,仅输出Emp表中与Name表姓名匹配的行 - 若
Emp表的ID未在Name表中出现,输出该ID对应的所有行
表结构示例
Emp表
id name status 1 David 0 1 James 1 2 Kelvin 0 2 John 1
Name表
id Name 1 James
预期输出
Id Name status 1 James 1 2 Kelvin 0 2 John 1
解决方案SQL
可以通过左连接+条件筛选或者EXISTS逻辑判断实现需求,以下是两种可行写法:
方法1:左连接结合条件
SELECT e.id, e.name, e.status FROM Emp e LEFT JOIN Name n ON e.id = n.id WHERE (n.id IS NOT NULL AND e.name = n.Name) OR n.id IS NULL;
方法2:EXISTS逻辑判断
SELECT e.id, e.name, e.status FROM Emp e WHERE EXISTS ( SELECT 1 FROM Name n WHERE n.id = e.id AND n.Name = e.name ) OR NOT EXISTS ( SELECT 1 FROM Name n WHERE n.id = e.id );
逻辑说明
两种写法核心逻辑一致:
- 筛选出
Emp表中ID在Name表存在且姓名匹配的行 - 同时筛选出
Emp表中ID未出现在Name表的所有行 - 将这两部分结果合并返回,即可满足需求
内容的提问来源于stack exchange,提问作者user3675044
相关产品推荐
相关产品推荐

