Как переопределить приоритет в SQL * Plus? - PullRequest
0 голосов
/ 15 октября 2010
select * from tab1
minus
select * from tab2
union
select * from tab2
minus
select * from tab1

Как я могу убедиться, что он анализируется как этот?

((select * from tab1
minus
select * from tab2)
union
(select * from tab2
minus
select * from tab1))

1 Ответ

1 голос
/ 15 октября 2010

Можете ли вы использовать выражение в скобках в предложении FROM, например, так:

SELECT *
FROM ((select * from tab1 minus select * from tab2)
      UNION
      (select * from tab2 minus select * from tab1)) AS symdiff

Если у таблиц есть первичные ключи в эквивалентных столбцах, вы можете использовать:

SELECT tab1.*
  FROM tab1
 WHERE tab1.pk NOT IN (SELECT tab2.pk FROM tab2)
UNION -- optionally UNION ALL
SELECT tab2.*
  FROM tab2
 WHERE tab2.pk NOT IN (SELECT tab1.pk FROM tab2)

Однако это исключено, потому что ничто не останавливает таблицу tab1 (pk, othercol), имеющую строку (pk = 1, othercol = 2), в то время как tab2 (pk, othercol) содержит строку(pk = 1, othercol = 3).Это то, с чем вам следует быть осторожным - однажды я был пойман неверным предположением.

...