ИСКЛЮЧИТЬ запрос в SQL - PullRequest
       3

ИСКЛЮЧИТЬ запрос в SQL

0 голосов
/ 14 октября 2011

Я делаю исключающий запрос в SQL, как это

Q1 ИСКЛЮЧИТЬ Q2 ИСКЛЮЧИТЬ Q3

Где Q1, Q2 и Q3 являются подзапросом.Я просто хочу знать, какой будет его продукция, (Q1-Q2) -Q3 или Q1- (Q2-Q3)?и если 2-й, как получить 1-й в качестве выхода?

Ответы [ 2 ]

4 голосов
/ 14 октября 2011

У меня нет установки DB2, но в PostgreSQL Q1 except Q2 except Q3 представляется интерполированным как (Q1 except Q2) except Q3 (примечание: generate_series(m,n) - это функция, найденная в PostgreSQL, которая генерирует один столбец целочисленных значений из * От 1004 * до n (где m<n, конечно)):

select generate_series(1,10) except select generate_series(5,15) except select generate_series(10,20);


 generate_series
-----------------
               1
               2
               3
               4
(4 rows)

select * from (select generate_series(1,10) except select generate_series(5,15))a except select generate_series(10,20);


 generate_series
-----------------
               1
               2
               3
               4
(4 rows)

select generate_series(1,10) except select * from (select generate_series(5,15) except select generate_series(10,20))a;


 generate_series
-----------------
               1
               2
               3
               4
              10
(5 rows)

Однако лучше использовать круглые скобки, чтобы убедиться, что порядок оценки соответствует желаемому.

0 голосов
/ 17 октября 2011

Стандарт SQL-92 подтверждает (Приложение C) то, что должно быть достаточно интуитивным: в отсутствие скобок оба вхождения EXCEPT в примере кода (очевидно) будут иметь одинаковый уровень приоритета, в котором если они должны оцениваться в порядке слева направо.

Из интереса, приоритет EXCEPT, INTERSECT и UNION (без скобок) зависит от реализации, поэтому обратитесь к документации по продукту SQL. Однако быстрый Google, похоже, предполагает, что большинство продуктов SQL (включая DB2) имеют EXCEPT и UNION с одинаковым уровнем приоритета и INTERSECT с более высоким уровнем приоритета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...