SQL查询存在A表但不存在B表的数据

方法1:

select * from a where id not in(select id from b)

方法2:

select a.* from a left join b on a.id=b.id where isnull(b.age)

方法3:
《SQL查询存在A表但不存在B表的数据》

其中B表的b_id字段引用了A表的id字段。现在有个查询需求:

给出已知的A表中的id,比如:id in (1,2,3),找出这些id在B表中没有与之对应的记录。比如说上面A表中的id=3这条记录,B表中没有b_id与之对应

利用子查询

SELECT a.id FROM A a WHERE a.id IN (1,2,3) AND NOT EXISTS (SELECT 1 FROM B b WHERE b.b_id = a.id)

利用上面的子查询就可以达到目的。
注意:
这个SQL 虽然可以用到索引,但是一定注意入参的个数,如果入参id的个数太多的话,性能有点问题。因为这个SQL会根据入参,一个一个执行子查询,进行比对的。

利用left join

这篇博文的有个网友提供了另外一种方式(请看这篇博文该网友的回复),这里感谢这位网友,下面把他的方案贴出来,如下:

select a.id from A a left join B b on a.id = b.b_id where a.id IN (1, 2, 3) and b.id is null

这样也可以用到索引,并且避免使用子查询。

参考博客:http://blog.csdn.net/linsongbin1/article/details/54573826

    原文作者:更好的自己520
    原文地址: https://blog.csdn.net/a3060858469/article/details/79651428
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞