我有以下兩個版本的ANSI兼容SQL(列/表名更改爲保護機密數據),其中一個通過遵循正確的邏輯來滿足我的要求沒有。Oracle專有連接 - 在多個條件下連接
1)ANSI加入1-作品
SELECT b.COLUMN_A,
COUNT(a.COLUMN_A)
FROM TABLE1 a
RIGHT OUTER JOIN
(SELECT COLUMN_A FROM TABLE2 WHERE COLUMN_X='TEST') b
ON a.COLUMN_A = b.COLUMN_A
AND a.COLUMN_B in (SELECT FROM TABLE3 WHERE COLUMN_Y=5) --WORKS
GROUP BY b.COLUMN_A
1),得到輸出是這樣的:
COLUMN_A COUNT(COLUMN_A)
--------------------------
A 0
B 0
C 1
D 1
E 0
2)ANSI加入2- Doesn't工作
SELECT b.COLUMN_A,
COUNT(a.COLUMN_A)
FROM TABLE1 a
RIGHT OUTER JOIN
(SELECT COLUMN_A FROM TABLE2 WHERE COLUMN_X='TEST') b
ON a.COLUMN_A = b.COLUMN_A
WHERE
a.COLUMN_B in (SELECT FROM TABLE3 WHERE COLUMN_Y=5) --DOESN'T WORK
GROUP BY b.COLUMN_A
3 )Oracle專有連接 - 不工作
SELECT b.COLUMN_A,
COUNT(a.COLUMN_A)
FROM TABLE1 a,(SELECT COLUMN_A FROM TABLE2 WHERE COLUMN_X='TEST') b
WHERE
a.COLUMN_A(+) = b.COLUMN_A
AND a.COLUMN_B in (SELECT FROM TABLE3 WHERE COLUMN_Y=5) --DOESN'T WORK
GROUP BY b.COLUMN_A
2)& 3)給出的輸出是這樣的:
COLUMN_A COUNT(COLUMN_A)
--------------------------
C 1
D 1
我明白(2,ANSI)&(3,專有)是等效的。但是對於(1,ANSI)是否有任何等效的專有SQL? 任何幫助將是最受歡迎的。 謝謝。 編輯:我已經用示例輸出更新了問題。
您可能會考慮添加信息以清楚說明,所需輸出的樣子以及您在不良情況下得到的結果。 – EvilTeach 2011-04-29 15:00:39