将 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 查询 [重复]

如何使用嵌套的 SELECT 子查询优化 UPDATE?

避免使用Doctrine DBAL查询构建器select语句将驼峰别名名称转换为小写

如何将带有子查询的 MySQL select 语句转换为同一张表的更新语句?