次の2つのバージョンのANSI準拠のSQL(機密データを保護するために列/テーブル名が変更されました)を使用しましたが、そのうちの1つは正しいロジックに従うことで私の要件を満たし、もう1つはそうではありません。
1)ANSI Join 1-Works
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 Join 2 - 機能しない
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,PROPRIETARY) が同等であることは理解しています。しかし、(1,ANSI) に相当する独自の SQL はありますか? どんな助けでも大歓迎です。ありがとう。編集:サンプル出力で質問を更新しました。