哈士奇WWW
2019-06-15 13:04:00
“不存在”與“左聯接”之間有什么區別?在我看來,您可以在SQL查詢中使用“不存在”、“不使用IN”或“左聯接為空”來執行相同的操作。例如:SELECT a FROM table1 WHERE a NOT IN (SELECT a FROM table2)SELECT a FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE table1.a = table2.a)
SELECT a FROM table1 LEFT JOIN table2 ON table1.a = table2.a WHERE table1.a IS NULL我不確定是否所有語法都是正確的,但這是我所見過的一般技巧。我為什么要選擇一個而另一個呢?表現不同嗎.?其中哪一個是最快/最有效的?(如果這取決于實現,何時使用?)
3 回答

HUX布斯
TA貢獻1876條經驗 獲得超6個贊
NOT IN
NULL
在……里面 MySQL
,NOT EXISTS
效率有點低 在……里面 SQL Server
,LEFT JOIN / IS NULL
效率較低 在……里面 PostgreSQL
,NOT IN
效率較低 在……里面 Oracle
,這三種方法都是相同的。

MYYA
TA貢獻1868條經驗 獲得超4個贊
not in
not exists

小怪獸愛吃肉
TA貢獻1852條經驗 獲得超1個贊
EXCEPT
:
SELECT a FROM table1EXCEPTSELECT a FROM table2
MINUS
SELECT a FROM table1 MINUSSELECT a FROM table2
OUTER APPLY
SELECT t1.a FROM table1 t1 OUTER APPLY ( SELECT t2.a FROM table2 t2 WHERE t2.a = t1.a ) AS dt1 WHERE dt1.a IS NULL;
添加回答
舉報
0/150
提交
取消