存在重复emp_id记录时,如何筛选employee表中dpt_id为null的记录?
实现方法
以下两种SQL方案均可满足需求,可根据你的数据库环境选择使用:
方案一:直接筛选employee表目标记录
该方案从employee表中提取dpt_id为NULL的记录,自动覆盖“当两表存在相同emp_id时仅保留employee表对应记录”的需求——因为employee表中无dpt_id的记录本身dpt_id就是NULL,只要emp_id在department表中存在,这条记录就会被保留,不会被department表的记录干扰。
SELECT e.* FROM employee e WHERE e.dpt_id IS NULL;
方案二:合并两表并按优先级去重
如果需要同时从两表获取数据,但确保相同emp_id的记录仅保留employee表中dpt_id为NULL的条目,可使用该方案:
-- 优先取employee表中符合条件的记录 SELECT emp_id, emp_name, dpt_id FROM employee WHERE dpt_id IS NULL UNION ALL -- 再取department表中未在employee表出现过emp_id的记录 SELECT emp_id, emp_name, dpt_id FROM department d WHERE NOT EXISTS ( SELECT 1 FROM employee e WHERE e.emp_id = d.emp_id AND e.dpt_id IS NULL );
内容的提问来源于stack exchange,提问作者aghyksa
相关产品推荐
相关产品推荐

