假设我有2个结果集(2个查询).
FIELDNAME VALUE
field1 20.00
field2 13.00
field3 4.00
FIELDNAME VALUE
field1 20.00
field2 14.00
field3 6.00
我知道query1 EXCEPT query2应该给出
FIELDNAME VALUE
field2 13.00
field3 4.00
但我真正想要的是从查询的两边显示任何存在差异的情况:
FIELDNAME VALUE
field2 13.00
field3 4.00
field2 14.00
field3 6.00
那可能吗?我想我可以在一个临时表中做一个SELECT UNION.然后删除任何NOT EXISTS字段名不同的行.还有什么更简单的吗?
看起来我可以将INTERSECT,UNION和EXCEPT以某种方式结合起来并以此结束,但没有太多的运气概念化.
最佳答案 我认为你应该能够通过两次使用EXCEPT并在结果上使用UNION ALL来获得所需内容:
-- records from the table1 that are not in table2
(SELECT * FROM table1
EXCEPT
SELECT * FROM table2)
UNION ALL
-- records from the table2 that are not in table1
(SELECT * FROM table2
EXCEPT
SELECT * FROM table1)
其他方法是使用UNION获取所有表的组合,然后使用EXCEPT消除所有相交记录:
-- Union of both tables
(SELECT * FROM table1
UNION ALL
SELECT * FROM table2)
EXCEPT -- Exclude the records ...
-- ... that are in both tables
(SELECT * FROM table1
INTERSECT
SELECT * FROM table2)