SQL Server で JOIN を使用して UPDATE ステートメントを実行するにはどうすればよいでしょうか? 質問する

SQL Server で JOIN を使用して UPDATE ステートメントを実行するにはどうすればよいでしょうか? 質問する

SQL Serverのこのテーブルを「親」テーブルのデータで更新する必要があります。以下を参照してください。

テーブル: セール

id (int)
udid (int)
assid (int)

テーブル: ud

id  (int)
assid  (int)

sale.assid更新する正しい値が含まれていますud.assid

どのようなクエリでこれを行うのでしょうか? 考えていますjoinが、可能かどうかはわかりません。

ベストアンサー1

構文は、使用している SQL DBMS によって厳密に異なります。ANSI/ISO (つまり、どの SQL DBMS でも動作するはずです)、MySQL、SQL Server、および Oracle でこれを行う方法をいくつか示します。私が提案する ANSI/ISO 方式は通常、他の 2 つの方法よりもはるかに遅くなりますが、MySQL、SQL Server、または Oracle 以外の SQL DBMS を使用している場合は、これが唯一の方法である可能性があります (たとえば、SQL DBMS が をサポートしていない場合MERGE)。

ANSI/ISO:

update ud 
     set assid = (
          select sale.assid 
          from sale 
          where sale.udid = ud.id
     )
 where exists (
      select * 
      from sale 
      where sale.udid = ud.id
 );

マイグレーション:

update ud u
inner join sale s on
    u.id = s.udid
set u.assid = s.assid

SQLサーバー:

update u
set u.assid = s.assid
from ud u
    inner join sale s on
        u.id = s.udid

PostgreSQL:

update ud
  set assid = s.assid
from sale s 
where ud.id = s.udid;

FROMPostgres の句ではターゲット テーブルを繰り返さないように注意してください。主な質問:PostgreSQL で更新 + 結合を行うにはどうすればよいでしょうか?

オラクル:

update
    (select
        u.assid as new_assid,
        s.assid as old_assid
    from ud u
        inner join sale s on
            u.id = s.udid) up
set up.new_assid = up.old_assid

:SQLite: いいえ

update ud 
     set assid = (
          select sale.assid 
          from sale 
          where sale.udid = ud.id
     )
 where RowID in (
      select RowID 
      from ud 
      where sale.udid = ud.id
 );

SQLite 3.33 では、PostgreSQL の構文に類似したUPDATE+構文のサポートが追加されました。FROM

update ud
  set assid = s.assid
from sale s 
where ud.id = s.udid;

主な質問:SQLite での結合による更新

おすすめ記事