问题:SELECT
使用公共表表达式(WITH
子句)比较两个查询的结果,而忽略行的顺序。
第一种方法:将行集的对称差与Oracle的集合运算符结合使用(Q1
并Q2
进行比较查询):
WITH A AS (Q1), B AS (Q2)
SELECT * FROM A MINUS SELECT * FROM B
UNION ALL
SELECT * FROM B MINUS SELECT * FROM A;
这种方法有一个缺点-我们不能替换WITH
之前有子句的查询SELECT
。
第二种方法:在不使用的情况下实现对称差异WITH
:
(Q1) MINUS (Q2) UNION ALL (Q2) MINUS (Q1);
它也有一个缺点-我们不能替换有ORDER BY
子句的查询。
我只想ORDER BY
从查询中删除整个子句,然后使用第二种方法。因此,问题是可以考虑其他哪些方法?
Oracle允许with
在子查询中使用嵌套子句。因此,您可以嵌套查询:
SELECT * FROM (Q1) MINUS SELECT * FROM (Q2)
UNION ALL
SELECT * FROM (Q2) MINUS SELECT * FROM (Q1);
如果您要自动构建查询,则此方法应该很容易工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句