前提・実現したいこと
Oracle11gで下記の条件を満たすUPDATE文を作りたいと思っています。
Teble_Bの「TYPE」カラムの3の中にある「ALPHA」カラムの文字列を条件として,
Teble_Aの「NAME」カラムの文字列に,Teble_Bの「ALPHA」カラムの文字列を()を入れて結合(例:太郎(Class leader))したいが,
Teble_AとTeble_Bで一致しているカラムの値(=がない)が存在しないため,Teble_AとTeble_Cの「MEMBER_ID」カラムの値と,Teble_BとTeble_Cの「GROUP_ID」カラムの値を=条件として繋げ,最後にTeble_Bの「TYPE」カラムの3を条件として,UPDATEしたい。
テーブル名:Teble_A
NAME | MEMBER_ID |
---|---|
太郎 | 10 |
次郎 | 20 |
五郎 | 30 |
テーブル名:Teble_B
ALPHA | GROUP_ID | TYPE |
---|---|---|
Class leader | 1000 | 3 |
Chief director | 2000 | 3 |
Vice president | 3000 | 1 |
President | 3000 | 3 |
テーブル名:Teble_C
MEMBER_ID | GROUP_ID |
---|---|
10 | 1000 |
20 | 2000 |
30 | 3000 |
実現結果
テーブル名:Teble_A
NAME | MEMBER_ID |
---|---|
太郎(Class leader) | 10 |
次郎(Chief director) | 20 |
五郎(President) | 30 |
試したこと
下記のSQLで実行しましたが,以下のエラーが表示されてしまいます。
行3でエラーが発生しました。: ORA-01427: 単一行副問合せにより2つ以上の行が戻されます
set()の後に,WHEREで直接「MEMBER_ID」カラムの番号を指定すれば1レコード分は更新可能でしたが,一気に条件指定したレコードを更新したい場合は,上記エラーが表示されてしまいます。
色々調べてみたのですが,不明だった為質問させていただきました。
どなたかご教授頂ければと思います。
SQL
1UPDATE Teble_A t1 2set NAME = NAME ||'('|| 3( 4 select t2.ALPHA 5 FROM Teble_B t2, 6 Teble_C t3 7 WHERE t1.MEMBER_ID = t3.MEMBER_ID 8 and t2.GROUP_ID = t3.GROUP_ID 9 and t3.TYPE = 3 10)||')';
回答1件
あなたの回答
tips
プレビュー