• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLの書き方)

SQLの書き方について教えてください

このQ&Aのポイント
  • SQL Serverを使用している際に、テーブルの結合と更新についてわからない箇所があります。詳しい方に教えていただけると助かります。
  • 具体的な問題として、テーブル1とテーブル2を特定のキーで結合し、結果をテーブル3に更新したいと考えています。ただし、テーブル2からは先頭の1レコードのみ取り出したいです。
  • テーブル3にはテーブル2で取得したid_1とid_2とid_3を書き込みたいです。具体的な条件やテーブルのデータについても記載しています。

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.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

runarena2
質問者

お礼

jamshid6 様 ご回答ありがとうございました。 本当に感謝します。 早速今日やってみたいと思います。 本当に助かりました。 これからもっと勉強していきたいと思います。 ありがとうございました。

runarena2
質問者

補足

jamshid6 様 こんばんは 今日さっそく試してみました。 期待通りの結果が出力されました。 まだまだ、追うのが精一杯ですが、必要なものが順番に組み立てられるように訓練します。 本当にありがとうございました。