不使用EXCEPT函數下求差集

OracaleSQLSERVER 中皆有差集函數去比較兩個數據集合中的差異的數據 => EXCEPT

使用如下:
SELECT FASSETID,FALTERID,FCKFUNDPROVIDED FROM KDY_T_FA_FUNDBALANCE WHERE FYEAR = 2022 AND FPERIOD = 10
EXCEPT
SELECT FASSETID,FALTERID,FCKFUNDPROVIDED FROM KDY_T_FA_FUNDBALANCE WHERE FYEAR = 2022 AND FPERIOD = 11

查詢結果如下:

mysql 中無EXCEPT函數,故有兩種方法去求得差集:
1.not exists
上面SQL語句可以替換如下語句:
SELECT FASSETID,FALTERID,FCKFUNDPROVIDED FROM KDY_T_FA_FUNDBALANCE A WHERE FYEAR = 2022 AND FPERIOD = 10 AND NOT EXISTS(
SELECT 1 FROM KDY_T_FA_FUNDBALANCE B WHERE FYEAR = 2022 AND FPERIOD = 11 AND B.FASSETID = A.FASSETID AND B.FALTERID = A.FALTERID AND B.FCKFUNDPROVIDED = A.FCKFUNDPROVIDED
)
2.left join
用左(右)連接來求差集,由於需要實施兩表連接會導致笛卡爾效應其輸出集的記錄行可能會增多,
若果不是一對一或一對多,我們應該將多對多的情況處理成多對一後才進行連接,否則輸出的記錄集可能不正確。

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

引用學習鏈接:
https://m.php.cn/article/485143.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章