Oracle SQL Developer中如何获取query1存在而query2不存在的元素
Oracle SQL取query1独有的ID的实现方案
方案1:使用MINUS集合运算符(最简洁)
Oracle原生支持集合差运算,直接对两个结果集求差即可:
SELECT ID FROM table1 MINUS SELECT ID FROM table2 UNION SELECT ID FROM table3;
特性说明:MINUS会自动对最终结果去重,完全匹配你需要的「存在于query1、不存在于query2」的集合逻辑,写法最简单。
方案2:使用NOT IN子查询
适合习惯子查询写法的场景,注意规避NULL值风险:
SELECT DISTINCT ID FROM table1 WHERE ID NOT IN ( SELECT ID FROM table2 UNION SELECT ID FROM table3 );
注意:如果子查询返回的ID存在NULL值,NOT IN会返回空结果,确定ID无NULL时可以用。
方案3:使用NOT EXISTS关联查询(性能最稳定)
不受NULL值影响,大数据量下性能更可控:
SELECT t1.ID FROM table1 t1 WHERE NOT EXISTS ( SELECT 1 FROM ( SELECT ID FROM table2 UNION SELECT ID FROM table3 ) t2 WHERE t2.ID = t1.ID );
特性说明:如果ID字段允许为空、或者表数据量较大,优先选择这个方案。
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

