- ベストアンサー
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行も出てしまいます。 よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
お礼
落ち着いて、BをA2に置き換えるとできました。 すみません。 つまり、 SELECT K.NO,K.N1,K.N2,K.N3 FROM (SELECT a2.NO NO,a2.CODE1,A1.NAME N1,a2.CODE2,A2.NAME N2,a2.CODE3,A3.NAME N3 FROM a2, (select code, DECODE(CODE,NULL,NULL,NAME) NAME from A) A1, (select code, DECODE(CODE,NULL,NULL,NAME) NAME from A) A2, (select code, DECODE(CODE,NULL,NULL,NAME) NAME from A) A3 WHERE A1.CODE(+) = a2.CODE1 AND A2.CODE(+) = a2.CODE2 AND A3.CODE(+) = a2.CODE3) K WHERE K.NO='1' GROUP BY K.NO, K.N1, K.N2, K.N3 ORDER BY K.NO と、なりました。1つ質問なのですが、 >DECODE(CODE,NULL,NULL,NAME) この部分は、A2テーブルにCODE1-3と、3つある為で例えば5つならば、 [DECODE(CODE,NULL,NULL,NULL,NULL,NAME)] と、なるのでしょうか ? 宜しくお願い致します。
補足
せっかく、ご回答を頂いたのですが、動きません。 「"B"."CODE_3":無効な識別子です」とエラーに なります。今回、Bテーブルは無いのでA2テーブルに 置き換えて見ましたが出来ません。 続けてのご指導をお願い致します。