我需要在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 |
+-------+
答案 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
检查可能包含空值的字段。