2016-04-01 12 views
0

table_A、table_B、table_Cという3つのテーブルがあります。 Table_Aは主キーを持ち、table_Bから外部キーによって参照されます。 Table_Cには、table_Bからの外部キーによって参照される主キーがあります。 、私はちょうどc.textdataの一つのテーブルからデータを取得Oracleクエリでlistaggの条件を使用する方法

select a.id_a, a.textdata, listagg(c.textdata, ', ') within group (order by c.id_c) data_c from table_a a inner join table_b b on (a.id_a = b.id_a) inner join table_c c on (b.id_c = c.id_c) where c.textdata like :data group by a.id_a, a.textdata;

ない:

Table_A: ID_A TextData

Table_B: ID_B ID_A ID_C

Table C: ID_C TextData

クエリ:デザインは、このようなものですリストから。私はこのクエリを使用してみてください場合:グループ機能ここ

私はからのデータを必要とするので、LISTAGGパラメータの条件を与えることをどのように許可されていません。

select a.id_a, a.textdata, listagg(c.textdata, ', ') within group (order by c.id_c) data_c from table_a a inner join table_b b on (a.id_a = b.id_a) inner join table_c c on (b.id_c = c.id_c) where listagg(c.textdata, ', ') like :data group by a.id_a, a.textdata;

私のようなエラーが取得しますリストア?

答えて

1

あなたのクエリをラップ試すことができます。

select * 
from (
     select a.id_a, 
      a.textdata, 
      listagg(c.textdata, ', ') within group (order by c.id_c) data_c 
     from table_a a 
      inner join table_b b on (a.id_a = b.id_a) 
      inner join table_c c on (b.id_c = c.id_c) 
     group by a.id_a, a.textdata 
    ) 
where data_c like :data 

またはLISTAGGによって構築されたフィールドに条件を適用する必要が使用して:

select a.id_a, 
     a.textdata, 
     listagg(c.textdata, ', ') within group (order by c.id_c) data_c 
from table_a a 
     inner join table_b b on (a.id_a = b.id_a) 
     inner join table_c c on (b.id_c = c.id_c) 
group by a.id_a, a.textdata 
having listagg(c.textdata, ', ') within group (order by c.id_c) like :data 
+0

私はクエリを実行しようとしていると私は同じような結果を得ますこれは: "data_c":無効な識別子 – user3505775

+0

申し訳ありませんが、私は間違った状態です。あなたのサポートに感謝します:D – user3505775

関連する問題