将 SELECT 转换为 UPDATE 查询 [关闭]
Posted
技术标签:
【中文标题】将 SELECT 转换为 UPDATE 查询 [关闭]【英文标题】:Convert SELECT to UPDATE query [closed] 【发布时间】:2017-08-02 17:20:24 【问题描述】:我正在尝试将此SELECT
查询转换为UPDATE
查询...
SELECT
ID, BL.[Tipo_Actividad], ACC.Tipo_Actividad AS TipoActividad,
[Aplicacion], AP.Descripcion AS AplicacionN,
[Gestor_APP], TIBM.Contacto AS Nombre, [Gestor_APP_Sust],
TIBM1.Contacto AS NombreSAP, [Hostname_APP], [IP_APP],
[Gestor_BD], TIBM2.Contacto AS NombreGBD, [Gestor_BD_Sust],
TIBM3.Contacto NombreGSBD, [Hostname_BD], [IP_BD],
[Sitios_Afectados], [Subsitios], [horarios], [dias], [No_Programar], [F20]
FROM
[ADOGESCAM].[dbo].[Baseline] BL
INNER JOIN
ACTIVIDADES_CAMBIO ACC ON BL.[Tipo_Actividad] = ACC.Id_Actividad
INNER JOIN
APLICACIONESINVO_CAMBIO AP ON BL.[Aplicacion] = AP.id_ApCambio
INNER JOIN
Torres_IBM TIBM ON BL.[Gestor_APP] = TIBM.Cve_TorresIBM
INNER JOIN
Torres_IBM TIBM1 ON BL.[Gestor_APP_Sust] = TIBM1.Cve_TorresIBM
INNER JOIN
Torres_IBM TIBM2 ON BL.[Gestor_BD] = TIBM2.Cve_TorresIBM
INNER JOIN
Torres_IBM TIBM3 ON BL.[Gestor_BD_Sust] = TIBM3.Cve_TorresIBM;
【问题讨论】:
请花点时间解释一下你想要什么。update
更新哪个表?,哪些列?,到什么值?
1) 你的困难是什么,2) 你希望更新什么特定的表,因为这个查询连接了很多不同的表? UPDATE
接受FROM
子句(您可以使用WITH
来简化),但它仍然一次只能更新一个表。
我要做的是更新该查询生成的数据
看,当你使用UPDATE
时,你更新了一个表中的数据。因此,请说明您要更新哪个表、您要更新该表中的哪些列以及您要为这些列提供什么值
【参考方案1】:
更新该查询生成的数据
例如我们需要更新[ADOGESCAM].[dbo].[Baseline]
中的一些内容:
UPDATE BL
SET SomeColumn = AnotherColumn
--,here comes another columns from [ADOGESCAM].[dbo].[Baseline]
FROM [ADOGESCAM].[dbo].[Baseline] BL
inner join ACTIVIDADES_CAMBIO ACC on BL.[Tipo_Actividad] = ACC.Id_Actividad
inner join APLICACIONESINVO_CAMBIO AP on BL.[Aplicacion] = AP.id_ApCambio
inner join Torres_IBM TIBM on BL.[Gestor_APP] = TIBM.Cve_TorresIBM
inner join Torres_IBM TIBM1 on BL.[Gestor_APP_Sust] = TIBM1.Cve_TorresIBM
inner join Torres_IBM TIBM2 on BL.[Gestor_BD] = TIBM2.Cve_TorresIBM
inner join Torres_IBM TIBM3 on BL.[Gestor_BD_Sust] = TIBM3.Cve_TorresIBM;
使用 SELECT 查询的结果更新表 77777 中的数据
我猜你需要MERGE SQL Server(从2008年开始):
;WITH cte AS (
--your query here
)
MERGE 77777 as t
USING cte as s
ON t.UniqueIDcolumn = s.UniqueIDcolumn --maybe more columns here,
--There must be 1 row in target (t) table that is corresponding to 1 row in source (s) table
WHEN MATCHED THEN
UPDATE SET Column1 = s.Column1
--, etc
WHEN NOT MATCHED THEN INSERT
INSERT (Column1, Column2, ...etc)
VALUES (s.Column1, s.Column2, ...etc);
这将更新已存在的内容并插入新数据。
【讨论】:
以上是关于将 SELECT 转换为 UPDATE 查询 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何将此 MySQL SELECT 查询转换为 DELETE 查询?
如何将mysql中的select语句转换为java中的查询?
UPDATE 查询的 WHERE 子句中的 SELECT 查询 [重复]