- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:副問い合わせの書き方について)
副問い合わせの書き方について
このQ&Aのポイント
- 副問い合わせを使用して、特定の条件を満たすデータを更新する方法について質問しています。
- 具体的には、特定の条件に一致するレコードの値を他のレコードにコピーする方法について知りたいです。
- 現在考えているSQL文では、副問い合わせの結果が複数ある場合にエラーが発生しています。1つのSQLでこの処理を実現する方法を教えてほしいという質問です。
- みんなの回答 (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 )
お礼
deadlockさん、ご回答ありがとうございます。 非常にわかりやすく、参考になりました。 本当にありがとうございました。