¿Cómo puedo hacer una declaración ACTUALIZAR con JOIN en SQL Server?
Necesito actualizar esta tabla en SQL Server con datos de su tabla 'principal', ver a continuación:
Tabla: venta
id (int)
udid (int)
assid (int)
Tabla: ud
id (int)
assid (int)
sale.assid
contiene el valor correcto para actualizar ud.assid
.
¿Qué consulta hará esto? Estoy pensando en una join
pero no estoy seguro si es posible.
La sintaxis depende estrictamente del DBMS SQL que esté utilizando. Aquí hay algunas formas de hacerlo en ANSI/ISO (también conocido como debería funcionar en cualquier DBMS SQL), MySQL, SQL Server y Oracle. Tenga en cuenta que mi método ANSI/ISO sugerido normalmente será mucho más lento que los otros dos métodos, pero si está utilizando un DBMS SQL que no sea MySQL, SQL Server u Oracle, entonces puede ser el único camino a seguir (p. ej. si su DBMS SQL no es compatible 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
Servidor 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;
Tenga en cuenta que la tabla de destino no debe repetirse en la FROM
cláusula de Postgres. Pregunta principal: ¿Cómo hacer una actualización + unirse en PostgreSQL?
Oráculo:
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 agregó soporte para una sintaxis UPDATE
+ FROM
análoga a la de PostgreSQL:
update ud
set assid = s.assid
from sale s
where ud.id = s.udid;
Pregunta principal: Actualizar con Join en SQLite
Esto debería funcionar en SQL Server:
update ud
set assid = sale.assid
from sale
where sale.udid = id
PostgreSQL
UPDATE table1
SET COLUMN = value
FROM table2,
table3
WHERE table1.column_id = table2.id
AND table1.column_id = table3.id
AND table1.COLUMN = value
AND table2.COLUMN = value
AND table3.COLUMN = value
Un enfoque SQL estándar sería
UPDATE ud
SET assid = (SELECT assid FROM sale s WHERE ud.id=s.id)
En SQL Server puedes usar una unión
UPDATE ud
SET assid = s.assid
FROM ud u
JOIN sale s ON u.id=s.id