Consulta de actualización de SQL mediante uniones

Resuelto Shyju asked hace 15 años • 13 respuestas

Tengo que actualizar un campo con un valor que se devuelve mediante una combinación de 3 tablas.

Ejemplo:

select
    im.itemid
    ,im.sku as iSku
    ,gm.SKU as GSKU
    ,mm.ManufacturerId as ManuId
    ,mm.ManufacturerName
    ,im.mf_item_number
    ,mm.ManufacturerID
from 
    item_master im, group_master gm, Manufacturer_Master mm 
where
    im.mf_item_number like 'STA%'
    and im.sku=gm.sku
    and gm.ManufacturerID = mm.ManufacturerID
    and gm.manufacturerID=34

Quiero actualizar los mf_item_numbervalores de campo de la tabla item_mastercon algún otro valor que esté unido en la condición anterior.

¿Cómo puedo hacer esto en MS SQL Server?

Shyju avatar Jun 12 '09 01:06 Shyju
Aceptado
UPDATE im
SET mf_item_number = gm.SKU --etc
FROM item_master im
JOIN group_master gm
    ON im.sku = gm.sku 
JOIN Manufacturer_Master mm
    ON gm.ManufacturerID = mm.ManufacturerID
WHERE im.mf_item_number like 'STA%' AND
      gm.manufacturerID = 34

Para que quede claro... La UPDATEcláusula puede hacer referencia a un alias de tabla especificado en la FROMcláusula. Entonces imen este caso es válido.

Ejemplo genérico

UPDATE A
SET foo = B.bar
FROM TableA A
JOIN TableB B
    ON A.col1 = B.colx
WHERE ...
gbn avatar Jun 11 '2009 18:06 gbn

Adaptando esto a MySQL: no hay ninguna FROMcláusula UPDATE, pero esto funciona:

UPDATE
    item_master im
    JOIN
    group_master gm ON im.sku=gm.sku 
    JOIN
    Manufacturer_Master mm ON gm.ManufacturerID=mm.ManufacturerID
SET
    im.mf_item_number = gm.SKU --etc
WHERE
    im.mf_item_number like 'STA%'
    AND
    gm.manufacturerID=34
gcbenison avatar Mar 18 '2012 02:03 gcbenison