我有以下查询(MySQL):
SELECT col1, col2 FROM database1.table
->WHERE col3 != ANY(SELECT col1 FROM database2.table)
->ORDER BY this, that;
我曾希望这将允许我从 database1 中的表中选择 col1 和 col2,其中 col3(仍在 database1 中)不等于 database2 中的表中的 col1。
当然,这不会起作用,因为 SELECT col1 FROM database2.table 返回不止一行,所以如果等于 row1,那么它不等于 row2,所以它仍然返回。
关于如何以正确的方式做到这一点有什么想法吗?
最佳答案
使用NOT IN
SELECT col1, col2 FROM database1.table ->WHERE col3 NOT IN(SELECT col1 FROM database2.table) ->ORDER BY this, that;
但请记住,子查询在 MySQL 中没有优化,如果 database1.table 中有很多记录,这会很慢。更快的方法是使用 JOIN
- SO 中有很多示例
关于MySQL 查询帮助 - 将 != 与 ANY 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6651905/