¿Cómo puedo hacer una declaración ACTUALIZAR con JOIN en SQL Server?

Resuelto Ant Swift asked hace 15 años • 19 respuestas

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.assidcontiene el valor correcto para actualizar ud.assid.

¿Qué consulta hará esto? Estoy pensando en una joinpero no estoy seguro si es posible.

Ant Swift avatar Aug 18 '09 18:08 Ant Swift
Aceptado

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 FROMclá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+ FROManá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

Eric avatar Aug 18 '2009 11:08 Eric

Esto debería funcionar en SQL Server:

update ud 
set assid = sale.assid
from sale
where sale.udid = id
edosoft avatar Aug 18 '2009 11:08 edosoft

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
user1154043 avatar Jan 17 '2012 13:01 user1154043

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
MattH avatar Aug 18 '2009 11:08 MattH