unir tipos tablas relacionadas multitablas horizontalmente eliminacion ejemplos consultas consulta concatenar sql sql-server tsql sql-server-2005 sql-update

tipos - Consulta de actualización de SQL usando uniones



unir consultas horizontalmente sql (9)

Adaptando esto a MySQL - no hay una cláusula FROM en 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

Tengo que actualizar un campo con un valor que es devuelto por 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 valores de campo mf_item_number de la tabla item_master con algún otro valor que se une en la condición anterior.

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


Intenta así ...

Update t1.Column1 = value from tbltemp as t1 inner join tblUser as t2 on t2.ID = t1.UserID where t1.[column1]=value and t2.[Column1] = value;


No usé su sql arriba, pero aquí hay un ejemplo de actualización de una tabla basada en una declaración de unión.

UPDATE p SET p.category = c.category FROM products p INNER JOIN prodductcatagories pg ON p.productid = pg.productid INNER JOIN categories c ON pg.categoryid = c.cateogryid WHERE c.categories LIKE ''whole%''


Puede especificar tablas adicionales utilizadas para determinar cómo y qué actualizar con la cláusula "FROM" en la instrucción UPDATE, como esto:

update item_master set mf_item_number = (some value) from group_master as gm join Manufacturar_Master as mm ON ........ where .... (your conditions here)

En la cláusula WHERE, debe proporcionar las condiciones y las operaciones de unión para unir estas tablas.

Bagazo


Puedes actualizar con MERGE Command con mucho más control sobre MATCHED y NOT MATCHED : (Cambié ligeramente el código fuente para demostrar mi punto)

USE tempdb; GO IF(OBJECT_ID(''target'') > 0)DROP TABLE dbo.target IF(OBJECT_ID(''source'') > 0)DROP TABLE dbo.source CREATE TABLE dbo.Target ( EmployeeID INT , EmployeeName VARCHAR(100) , CONSTRAINT Target_PK PRIMARY KEY ( EmployeeID ) ); CREATE TABLE dbo.Source ( EmployeeID INT , EmployeeName VARCHAR(100) , CONSTRAINT Source_PK PRIMARY KEY ( EmployeeID ) ); GO INSERT dbo.Target ( EmployeeID, EmployeeName ) VALUES ( 100, ''Mary'' ); INSERT dbo.Target ( EmployeeID, EmployeeName ) VALUES ( 101, ''Sara'' ); INSERT dbo.Target ( EmployeeID, EmployeeName ) VALUES ( 102, ''Stefano'' ); GO INSERT dbo.Source ( EmployeeID, EmployeeName ) VALUES ( 100, ''Bob'' ); INSERT dbo.Source ( EmployeeID, EmployeeName ) VALUES ( 104, ''Steve'' ); GO SELECT * FROM dbo.Source SELECT * FROM dbo.Target MERGE Target AS T USING Source AS S ON ( T.EmployeeID = S.EmployeeID ) WHEN MATCHED THEN UPDATE SET T.EmployeeName = S.EmployeeName + ''[Updated]''; GO SELECT ''-------After Merge----------'' SELECT * FROM dbo.Source SELECT * FROM dbo.Target


Una de las formas más fáciles es usar una expresión de tabla común (ya que ya está en SQL 2005):

with cte as ( select im.itemid ,im.sku as iSku ,gm.SKU as GSKU ,mm.ManufacturerId as ManuId ,mm.ManufacturerName ,im.mf_item_number ,mm.ManufacturerID , <your other field> 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) update cte set mf_item_number = <your other field>

El motor de ejecución de consultas descubrirá por sí mismo cómo actualizar el registro.


Puede utilizar la siguiente consulta:

UPDATE im SET mf_item_number = (some value) 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 `sql`


MySQL: In general, make necessary changes par your requirement: UPDATE shopping_cart sc LEFT JOIN package pc ON sc. package_id = pc.id SET sc. amount = pc.amount


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 cláusula UPDATE puede hacer referencia a un alias de tabla especificado en la cláusula FROM . Así que en este caso im válido.

Ejemplo genérico

UPDATE A SET foo = B.bar FROM TableA A JOIN TableB B ON A.col1 = B.colx WHERE ...