- 締切済み
Oracleのupdate文について
OracleでテーブルB、Cを結合し取得できた項目で、テーブルAを更新したいのですがSQLがわかりません。結合結果とテーブルAは1:1にはなりません。 件数が結合結果>テーブルAの時もあれば、その逆の場合もあります。また、複数項目を更新したいです。実行して考えてみたいのですが、明朝客先ですぐに実行しなければならず(テスト環境はあるので明日そこで一旦確認後、すぐに本番環境で実行)、現在移動中→ホテル泊のため余裕がありません。 ネットで下記を見つけたのですが、更新する項目に更新日時を追加したいのと、テーブルAとの紐付けやEXISTSのWHEREはテーブルBとC両方の項目に紐づけたいです。 また、テーブルAの更新条件に、テーブルB、Cにはないcolumn③に対する条件も追加したいです。 UPDATE [TABLE①] A SET (COLUMN①, COLUMN②) = ( SELECT B.COLUMN, C.COLUMN FROM [TABLE②] B, [TABLE③] C WHERE B.COLUMN = C.COLUMN AND B.COLUMN = A.COLUMN ) WHERE EXISTS ( SELECT 1 FROM [TABLE②] B2 WHERE B2.COLUMN = A.COLUMN) もろもろとわかりづらい説明&他力本願で心苦しいのですが、どなたか教えていただけないでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- dell_OK
- ベストアンサー率13% (766/5720)
更新日時を忘れてました。 UPDATE [TABLE①] A SET (COLUMN①, COLUMN②,COLUMN更新日時) = ( SELECT B.COLUMN, C.COLUMN ,sysdate FROM [TABLE②] B, [TABLE③] C WHERE B.COLUMN = C.COLUMN AND B.COLUMN = A.COLUMN ) WHERE EXISTS ( SELECT 1 FROM [TABLE②] B2, [TABLE③] C2 WHERE B2.COLUMN = C2.COLUMN AND B2.COLUMN = A.COLUMN) AND A.column③ = 条件
- dell_OK
- ベストアンサー率13% (766/5720)
EXISTSの中にもJOINと、 Aの条件にcolumn③を追加でどうでしょうか。 UPDATE [TABLE①] A SET (COLUMN①, COLUMN②) = ( SELECT B.COLUMN, C.COLUMN FROM [TABLE②] B, [TABLE③] C WHERE B.COLUMN = C.COLUMN AND B.COLUMN = A.COLUMN ) WHERE EXISTS ( SELECT 1 FROM [TABLE②] B2, [TABLE③] C2 WHERE B2.COLUMN = C2.COLUMN AND B2.COLUMN = A.COLUMN) AND A.column③ = 条件