MySQL查询帮助-使用!=任何

MySQL查询帮助-使用!=任何,mysql,Mysql,我有以下查询: SELECT col1, col2 FROM database1.table ->WHERE col3 != ANY(SELECT col1 FROM database2.table) ->ORDER BY this, that; 我曾希望这能让我从database1中的表中选择col1和col2,其中仍在database1中的col3与database2中的表中的col1不相等 当然,这不起作用,因为SELECT col1 FROM database2

我有以下查询:

SELECT col1, col2 FROM database1.table 
  ->WHERE col3 != ANY(SELECT col1 FROM database2.table) 
  ->ORDER BY this, that;
我曾希望这能让我从database1中的表中选择col1和col2,其中仍在database1中的col3与database2中的表中的col1不相等

当然,这不起作用,因为SELECT col1 FROM database2.table返回多行,所以如果它等于行1,那么它就不等于行2,所以它仍然返回

关于如何以正确的方式进行此操作,您有什么想法吗?

请不要在中使用

WHERE col3 NOT IN (SELECT col1 FROM database2.table)
从database1.table中选择col1、col2 ->其中col3未插入从database2.table中选择col1 ->命令这个,命令那个


但请记住,在MySQL中,子选择并没有得到优化,如果database1.table中有很多记录,那么速度会很慢。更快的方法是使用JOIN-在这里有很多示例,所以您可以使用NOT IN操作符来实现这一点 从database1.table中选择col1、col2 ->其中col3未插入从database2.table中选择col1
->命令这个,命令那个

只需使用全部而不是任何:

SELECT col1, col2 FROM database1.table 
WHERE col3 != ALL(SELECT col1 FROM database2.table) 
ORDER BY this, that;

我不知道MySQL中的子选择没有得到优化。这是否意味着,如果必要的约束可用的话,没有一个查询转换工具可以将NOT IN操作转换为反联接?我也将研究联接。非常感谢。当您在选择中执行时。。。MySQL对在外部行中找到的每一行执行内部选择,而不是在外部行之前只执行一次内部选择,因此您必须编写select col1、col2、,a.col FROM database1.table LEFT JOIN选择col1作为col FROM database2.table作为ONtable.col3=a.col1,其中col为NULL@Lukas你是个幸运的家伙:p与使用MySQL相比,有很多事情你都不在乎。@Darhazer:我知道,但相信我,还有其他问题:+1是重要的性能提示!