MySQL - 是否有可能获得两个查询结果的“差异”?

时间:2009-10-15 02:19:53

标签: mysql sql intersection

我需要在union中合并两个查询结果,但我想只保留两个结果之间的差异。这可能吗?

我基本上选择查询1中的所有资源,以及查询2中的NOT-ALLOWED资源,我显然需要在上一个结果中使用ALLOWED资源。

在pseodo-code中:

Query1 - Query2

Queryresult 1:

+-------+
|  id   |
+-------+
|   1   |
+-------+
|   2   |
+-------+
|   3   |
+-------+
|   4   |
+-------+
|   5   |
+-------+
|   6   |
+-------+

Queryresult 2:

+-------+
|  id   |
+-------+
|   2   |
+-------+
|   5   |
+-------+

需要:

+-------+
|  id   |
+-------+
|   1   |
+-------+
|   3   |
+-------+
|   4   |
+-------+
|   6   |
+-------+

3 个答案:

答案 0 :(得分:45)

像这样,使用NOT IN

SELECT id FROM queryOneTable
WHERE id NOT IN (
    SELECT id FROM queryTwoTable
)

答案 1 :(得分:4)

我在SQLExpress中测试了这个查询,因为我没有MySql。我假设它的工作方式相同。

select x.id
from x 
left join y on x.id = y.id
where y.id is null

答案 2 :(得分:0)

版本10.3中的MariaDB中会有EXCEPT命令。

同时,如果您需要完全不同,而不仅仅是在一个字段上,您可以使用CONCAT解决方法。我们的想法是连接第一个查询的所有字段并添加

HAVING CONCAT_WS(',', field_names) NOT IN (
  SELECT CONCAT(',', fields) FROM other_query
)

如果字段的值可以包含逗号,请选择另一个分隔符而不是逗号。另外,添加IFNULL检查可能包含空值的字段。