1. ホーム
  2. sql

[解決済み] SQL ServerでJOINを使用してUPDATE文を実行するにはどうすればよいですか?

2022-03-17 20:17:48

質問

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

テーブル: 販売

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

テーブル:ud

id  (int)
assid  (int)

sale.assid には、更新するための正しい値が含まれています。 ud.assid .

どのようなクエリでこれを行うのでしょうか?私が考えているのは join が、可能かどうかわからない。

どのように解決するのですか?

構文は、どの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
 );

MySQLのことです。

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

SQL Serverです。

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;

ターゲット・テーブルが FROM 節を使用します。

オラクル

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
 );