現在postgreSQLにてテーブルAのカラムAに入っている値をarray_agg関数で連結したものを、カラムcの値でorder byしテーブルBのカラムAへupdateで挿入するというSQLを作成しました。しかし、これでは連結した際の文字数がカラムのサイズを越えた場合エラーとなるため、カラムBの最大値を条件にカラムAの値を取り出そうとしているのですが、条件の設定が考え付きません。カラムBの各値は可変なので、変動します。
postgreSQLのバージョンは9.2.5です。
イメージは以下の通りです
tA
カラムA カラムB カラムC
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
A | 9 | a
A | 7 | a
A | 4 | a
A | 2 | a
B | 8 | a
B | 2 | a
B | 1 | a
B | 3 | a
C | 6 | a
C | 1 | a
C | 5 | b
A | 9 | b
A | 7 | b
A | 4 | b
A | 2 | b
B | 8 | b
B | 2 | b
B | 1 | b
B | 3 | b
C | 6 | b
C | 1 | b
C | 5 | b
現在
update tA set
カラムA = (select array_agg(カラムA) as カラムA from tB
where tA.カラムA = tB.カラムA order by tA.カラムC = tB.カラムC;
tB
カラムc|カラムA
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
a |{A,A,A,A,B,B,B,B,C,C,C}
b |{A,A,A,A,B,B,B,B,C,C,C}
↑これを
tB
カラムc|カラムA
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
a |{A,B,C}
b |{A,B,C}
↑こんな感じにしたい
ほぼ丸投げしてしまう形になってしまうのですが、よろしくお願いします。。。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。