1. 程式人生 > >【Mysql】求兩個表(查詢結果)的差集

【Mysql】求兩個表(查詢結果)的差集

求兩個查詢結果的差集,Mysql直接提供了關鍵字not in,但是not in的效率極其低下,出現例如求一個上千查詢結果在上萬查詢結果的差集,那麼使用not in來查詢的查詢速度極其緩慢,這是必須使用左連結的方式求查詢。

先從簡單的說起,比如在表blog的id情況是這樣的:


在表usertable的id情況是這樣的:


現在要求這兩個結果的差集,可以使用如下的語句:
 

select id from usertable
where id not in (select id from blog)

但是,not in的查詢效率是極度低下的,主要是去到上萬,僅僅是上萬級的資料查詢就會出現在查詢的時候宕機,無法查詢的情況,因此還不得不得換做左連結查詢的方式,具體如下:

 

select id FROM usertable LEFT JOIN
(select id as i from blog) as t1
ON usertable.id=t1.i where t1.i IS NULL

但是,not in的查詢效率是極度低下的,主要是去到上萬,僅僅是上萬級的資料查詢就會出現在查詢的時候宕機,無法查詢的情況,因此還不得不得換做左連結查詢的方式,具體如下:

    select id FROM usertable LEFT JOIN
    (select id as i from blog) as t1
    ON usertable.id=t1.i where t1.i IS NULL

這裡blog的id,也就是t1中的id,還必須換成i,或者其它變數名,不然連線的時候會出現混亂,出現如下的報錯:


這種左連結的查詢方式得出來結果與not in一樣,但是查詢時間與效率,卻是複雜的左連結遠遠快於not in:


---------------------
作者:yongh701
來源:CSDN
原文:https://blog.csdn.net/yongh701/article/details/51689976
版權宣告:本文為博主原創文章,轉載請附上博文連結!