Oracl[10g]の SQL文について(No.8)
何度も恐縮です。前回の質問の続きとなるかと思いますが・・・
Oracl[10g]の SQL文について、教えて下さい。
[A]テーブルに [CODE](key) と [NAME]フィールドがあるとします。
内容は、
A-1 NAME-1
A-2 NAME-2
A-3 NAME-3 と、します。
[A2]テーブルに[NO](key) [CODE1] と [CODE2] と [CODE3]フィールドがあるとします。
内容は、
1 A-1 A-2 (null)
2 A-2 A-1 A-3
3 (null)A-3 A-2 と、します。
結果が、
1 A-1 NAME-1 A-2 NAME-2 (null) (null)
2 A-2 NAME-2 A-1 NAME-1 A-3 NAME-3
3 (null/null)A-3 NAME-3 A-2 NAME-2
と、なる様にする為のSQL文は、
>select a2.no, a2.code1,a_1.name, a2.code2,a_2.name, a2.code3,a_3.name
>from a2,
>(select code, name from a) a_1,
>(select code, name from a) a_2,
>(select code, name from a) a_3
>where
>a2.code1 = a_1.code(+) and
>a2.code2 = a_2.code(+) and
>a2.code3 = a_3.code(+)
と、教えて頂き、完成致しました。
これを、アレンジして、
SELECT A2.NO, A2x.N1, A2x.N2, A2x.N3
FROM A,A2 ,
(
select a2.no, a2.code1,a1x.name AS N1, a2.code2,a2x.name AS N2, a2.code3,a3x.name AS N3
from a2,
(select code, name from a) a1x,
(select code, name from a) a2x,
(select code, name from a) a3x
where
a2.code1 = a1x.code(+) and
a2.code2 = a2x.code(+) and
a2.code3 = a3x.code(+)
) A2x
WHERE A2.NO='1'
GROUP BY A2.NO, A2x.N1, A2x.N2, A2x.N3
ORDER BY A2.NO
と、作りました。つまり、
1 A-1 NAME-1 A-2 NAME-2 (null) (null)
と、言う結果が欲しいのです。
ところが、
1 (null) NAME-3 NAME-2
1 NAME-1 NAME-2 (null)
1 NAME-2 NAME-2 NAME-3
と、3行も出てしまいます。
よろしくお願い致します。
補足
ご回答有難うございます。 ソースコードを調べたところ自分のコードの中にミスがありました。 新たに知りたいところが出てきましたが、バッチ処理に関してです。たとえば "Delete…;Insert…;Inset…;Select…”を一発のSQL文で処理したいですが、可能でしょうか。参考になるウェブページや方法がお分かりでしたら教えてください。