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;
FROM
Postgres の句ではターゲット テーブルを繰り返さないように注意してください。主な質問: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 での結合による更新