Проблема: сравнивает результаты двух SELECT
запросов с использованием общих табличных выражений (предложение WITH
), игнорируя порядок строк.
Первый подход : использовать симметрию c разность наборов строк с операторами набора 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
.
Второй подход: реализовать симметрию c разницу без WITH
s:
(Q1) MINUS (Q2) UNION ALL (Q2) MINUS (Q1);
У этого тоже есть недостаток - мы не можем заменить запросы, имеющие предложение ORDER BY
.
Я придумал только удаление всего предложения ORDER BY
из запросов, а затем с использованием второго подхода. Итак, вопрос в том, какие другие подходы можно рассмотреть?