mysql SELECT NOT IN() - 不相交集?

use*_*841 10 mysql disjoint-union

我在查询工作时遇到问题,我认为应该可行.它在形式中

SELECT DISTINCT a, b, c FROM t1 WHERE NOT IN ( SELECT DISTINCT a,b,c FROM t2 ) AS alias
Run Code Online (Sandbox Code Playgroud)

但MySQL的扼流圈,其中"IN("启动.请问mysql支持这样的语法吗?如果没有,我怎么能去获得这些结果?我想找到一个不同的元组(A,B,C)在表1中不存在在表2中.

wic*_*ich 14

你应该使用不存在:

SELECT DISTINCT a, b, c FROM t1 WHERE NOT EXISTS (SELECT NULL FROM t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c)
Run Code Online (Sandbox Code Playgroud)

即使只检查一个密钥,使用NOT IN也不是最好的方法.原因是,如果使用NOT EXISTS,DBMS将只需检查索引是否存在所需列的索引,对于NOT IN,它必须读取实际数据并创建随后需要检查的完整结果集.

使用LEFT JOIN然后检查NULL也是一个坏主意,当表很大时会很痛苦,因为查询需要进行整个连接,完全读取两个表并随后丢掉很多表.此外,如果列允许NULL值,则检查NULL将报告误报.