MySQL求兩表的差集(非交集)


mysql如何查詢兩個字段數不同的表中數據不一致的記錄

一般可用NOT EXISTS(非存在子句)或 LEFT JOIN左(右)連接后所產生空字段值來篩選兩表的差集

1、NOT EXISTS 

not exists在比對字段有可利用的索引時,其運行效率是非常高,但是如果沒有索引的情況下運行在大數據表時,其運行效率極差,這時應避免使用它

SELECT
    * 
FROM
    smd_employee t1 
WHERE
    NOT EXISTS ( SELECT 1 FROM asd_user_account t2 WHERE t2.u_phone = t1.employee_phone );

 2、LEFT JOIN

用左(右)連接來求差集,由於需要實施兩表連接會導致笛卡爾效應其輸出集的記錄行可能會增多,

若果不是一對一或一對多,我們應該將多對多的情況處理成多對一后才進行連接,否則輸出的記錄集可能不正確。

SELECT
    a.* 
FROM
    smd_employee a
    LEFT JOIN asd_user_account b ON b.u_phone = a.employee_phone 
WHERE
    b.u_phone IS NULL;

 求差集的兩種方法,有索引可利用時,not exists的效率要高於left join,反之left join效率更好

原文參考:https://zhidao.baidu.com/question/565882811554863764.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM