1. 程式人生 > >SQL查詢存在A表但不存在B表的資料

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:
這裡寫圖片描述

其中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

這樣也可以用到索引,並且避免使用子查詢。