判断是否存在在父结果集中有而在子结果集中没有的记录的最佳方法

CSDN上有一个帖子:求:判断一个表的数据不在另一个表中最优秀方法?(高手请进)
有人说用left join效率最好

其实应该是EXISTS 的效率最高

如:
1.SELECT a.hdr_key  FROM hdr_tbl a WHERE NOT EXISTS (SELECT * FROM dtl_tbl b WHERE a.hdr_key = b.hdr_key)

2.SELECT a.hdr_key  FROM hdr_tbl a
LEFT JOIN dtl_tbl b ON a.hdr_key = b.hdr_key  WHERE b.hdr_key IS NULL

3.SELECT hdr_key  FROM hdr_tbl
WHERE hdr_key NOT IN (SELECT hdr_key FROM dtl_tbl) 
 
三种写法都可以得到同样正确的结果,但是效率依次降低。

你可能感兴趣的:(方法)