Для
(select * from query1 EXCEPT select * from query2)
UNION ALL
(select * from query2 EXCEPT select * from query1)
Я провел несколько испытаний на postgres 9.4
, и вот мои результаты.
[1] Минус не поддерживается, поэтому необходимо использовать EXCEPT
, как говорит @ Bogdan
[2] Использование только EXCEPT
не учитывает дубликаты, поэтому пришлось использовать EXCEPT ALL
[3] EXCEPT ALL
требует, чтобы порядок столбцов в результирующем файле был таким же, как в
Приведенные выше запросы QUERY1
и QUERY2
должны либо возвращать один и тот же порядок столбцов, либо мы должны обернуть запрос и убедиться, что порядок столбцов совпадает (возможно, это происходит в логике приложения)
Так что я думаю, что если мы будем иметь в виду более 3 пунктов, мы можем быть на 100% уверены, что данные, возвращаемые двумя запросами к данному набору данных, абсолютно одинаковы.
будет обновляться, если я столкнусь с более сложным случаем, который может дать сбой.