查詢我除了查詢在這樣的SQL除了在SQL
Q1 EXCEPT Q2 Q3除外
其中Q1,Q2和Q3子查詢做一個。 我只想知道它的輸出是什麼,(Q1-Q2)-Q3或Q1-(Q2-Q3)?如果是第二,如何獲得第一個作爲輸出?
查詢我除了查詢在這樣的SQL除了在SQL
Q1 EXCEPT Q2 Q3除外
其中Q1,Q2和Q3子查詢做一個。 我只想知道它的輸出是什麼,(Q1-Q2)-Q3或Q1-(Q2-Q3)?如果是第二,如何獲得第一個作爲輸出?
我沒有DB2的安裝,但在PostgreSQL中,Q1 except Q2 except Q3
出現要被內插爲(Q1 except Q2) except Q3
(注:generate_series(m,n)
是PostgreSQL中的功能,其生成的整數值的從m
到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)
然而,這是最好用括號做出一定的評價的順序是你想要的。
thanx很多,我認爲這是它 – Vishal
不客氣。 :) – 2011-10-14 19:27:31
由於爲了清晰起見,對於parens的建議,我贊成。非常同意。任何時候你必須停下來思考,沒有他們那麼糟糕。 –
SQL-92標準確認了(附錄C)什麼應該相當直觀:如果沒有括號,示例代碼中的兩個出現的EXCEPT
顯然會處於相同的優先級,在這種情況下他們應按照從左到右的順序進行評估。
出於興趣的EXCEPT
,INTERSECT
和UNION
(括號除外)的優先級是實現相關,所以請參閱SQL產品的文檔。然而,谷歌似乎表示,大多數SQL產品(包括DB2)的優先級爲EXCEPT
和UNION
,優先級爲INTERSECT
。
這對實際的代碼來說會容易得多。 – Johan
按照您在問題中提出的建議將它們括在括號中。 – 2011-10-14 19:14:50
我們應該如何知道輸出是什麼? –