- ベストアンサー
SQLの書き方について教えてください
- SQL Serverを使用している際に、テーブルの結合と更新についてわからない箇所があります。詳しい方に教えていただけると助かります。
- 具体的な問題として、テーブル1とテーブル2を特定のキーで結合し、結果をテーブル3に更新したいと考えています。ただし、テーブル2からは先頭の1レコードのみ取り出したいです。
- テーブル3にはテーブル2で取得したid_1とid_2とid_3を書き込みたいです。具体的な条件やテーブルのデータについても記載しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
UPDATE TABLE3 SET id_3=tx.id_3 FROM TABLE3 t3 INNER JOIN (SELECT t1.id_2 id_1,t1.id_3 id_2, (SELECT TOP 1 id_1+'-'+CONVERT(varchar,id_2)+'-'+CONVERT(varchar,id_3) FROM TABLE2 WHERE TEST=t1.TEST AND TEST1=t1.TEST1 ORDER BY id_1,id_2,id_3) id_3 FROM TABLE1 t1) tx ON tx.id_1=t3.id_1 AND tx.id_2=t3.id_2 WHERE tx.id_3 IS NOT NULL なお、SQL Server 2005であればROW_NUMBERも使えます。 いずれにせよ、必要なものを順番に組み立てることが肝要です。 UPDATE TABLE3 SET id_3=tx.id_3 FROM TABLE3 t3 INNER JOIN (SELECT t1.id_2 id_1, t1.id_3 id_2, t2.id_1+'-'+CONVERT(varchar,t2.id_2)+'-'+CONVERT(varchar,t2.id_3) id_3 FROM TABLE1 t1 INNER JOIN (SELECT ROW_NUMBER() OVER (PARTITION BY TEST,TEST1 ORDER BY id_1,id_2,id_3) SEQ, * FROM TABLE2) t2 ON t1.TEST=t2.TEST AND t1.TEST1=t2.TEST1 WHERE t2.SEQ=1) tx ON tx.id_1=t3.id_1 AND tx.id_2=t3.id_2
お礼
jamshid6 様 ご回答ありがとうございました。 本当に感謝します。 早速今日やってみたいと思います。 本当に助かりました。 これからもっと勉強していきたいと思います。 ありがとうございました。
補足
jamshid6 様 こんばんは 今日さっそく試してみました。 期待通りの結果が出力されました。 まだまだ、追うのが精一杯ですが、必要なものが順番に組み立てられるように訓練します。 本当にありがとうございました。