I need to update this table in SQL Server with data from its ‘parent’ table, see below:
id (int) udid (int) assid (int)
id (int) assid (int)
sale.assid contains the correct value to update
What query will do this? I’m thinking of a
join but I’m not sure if it’s possible.
Syntax strictly depends on which SQL DBMS you’re using. Here are some ways to do it in ANSI/ISO (aka should work on any SQL DBMS), MySQL, SQL Server, and Oracle. Be advised that my suggested ANSI/ISO method will typically be much slower than the other two methods, but if you’re using a SQL DBMS other than MySQL, SQL Server, or Oracle, then it may be the only way to go (e.g. if your SQL DBMS doesn’t support
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
update u set u.assid = s.assid from ud u inner join sale s on u.id = s.udid
update ud set assid = s.assid from sale s where ud.id = s.udid;
Note that the target table must not be repeated in the
FROM clause for Postgres.
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
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 );