从 Select 更新 Mysql 表

问题描述

我有以下选择:

select a.TX,b.PSP_map as PSP_map_DC from psp_DC_CO_consol a 
left join psp_DC_CO_consol b on b.TX=a.TX
where a.source='CORE' and a.PSP_map is NULL and a.PSP<>'' and a.TX<>'' and a.StatusTX=1 
and b.PSP_map is not NULL

我现在需要使用表 psp_DC_CO_consol 中我选择的“PSP_map_DC”列更新 PSP_map 列,并且仅更新来自我选择的 source='CORE' 和 TX= TX 的行。

我试过没有成功。

解决方法

您需要在 UPDATE 语句中进行自联接,就像您的查询一样,但它应该是 INNER 联接,因为您有条件 b.PSP_map IS NOT NULL

UPDATE psp_DC_CO_consol a
INNER JOIN psp_DC_CO_consol b ON b.TX = a.TX
SET a.PSP_map = b.PSP_map
WHERE a.source='CORE' AND a.PSP_map is NULL AND a.PSP <> '' 
  AND a.TX <> '' AND a.StatusTX = 1 AND b.PSP_map IS NOT NULL
,

在进行更新查询时对值使用子查询:

update my_table set value = (select value from other_table where condition)

但是你应该确保子查询只返回 1 行