• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:副問い合わせの書き方について)

副問い合わせの書き方について

このQ&Aのポイント
  • 副問い合わせを使用して、特定の条件を満たすデータを更新する方法について質問しています。
  • 具体的には、特定の条件に一致するレコードの値を他のレコードにコピーする方法について知りたいです。
  • 現在考えているSQL文では、副問い合わせの結果が複数ある場合にエラーが発生しています。1つのSQLでこの処理を実現する方法を教えてほしいという質問です。

質問者が選んだベストアンサー

  • ベストアンサー
  • deadlock
  • ベストアンサー率67% (59/87)
回答No.1

手元にOracleがないので、きちんと確認はしていませんが、概ね下記の通りです。 (1)の条件で、同一MAINIDのレコードの中からFLAG=1を探すようにしています。 (2)の条件では最初の一レコードだけ使用するようにしています。Oracle9iなら、Firstなどでも大丈夫だと思います。 (3)の条件は、FLAG=1のレコードが存在するMAINIDのレコードのみ更新するようにしています。これがない場合、FLAG=1が存在しないMAINIDを持つデータのNAMEにはNULLがセットされます。 UPDATE   IDLIST T1 SET   NAME = (     SELECT       NAME     FROM       IDLIST T2     WHERE       T2.MAINID = T1.MAINID -- (1)同じIDのものからだけ       AND T2.FLAG = 1       AND ROWNUM = 1 -- (2)最初の一行のみ使用   ) WHERE   -- (3)この条件を消すと、FLAG=1のレコードが見つからない   -- 時にNULLが設定されてしまう。   EXISTS (     SELECT       'X'     FROM       IDLIST T3     WHERE       T3.MAINID = T1.MAINID       AND T3.FLAG = 1       AND ROWNUM = 1   )

syu1219_a
質問者

お礼

deadlockさん、ご回答ありがとうございます。 非常にわかりやすく、参考になりました。 本当にありがとうございました。

関連するQ&A