“不存在”与“左联接”之间有什么区别?在我看来,您可以在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
提交
取消