SQL查詢存在A表但不存在B表的資料
阿新 • • 發佈:2019-02-16
方法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
這樣也可以用到索引,並且避免使用子查詢。