首页 > 解决方案 > MySQL选择并匹配两个表并根据匹配的数据更新列

问题描述

这对我来说似乎很难,这就是为什么我需要你的帮助。所以基本上,我有两个名为xp_pn_resaleand的表xp_guru_properties。我需要做的是根据另一个表中的数据更新或设置postal_code表中的列。xp_pn_resale所以这是我的桌子

我的 xp_pn_resale 表,我写了这样的查询,以便向您展示

SELECT postal_code, 
block,
concat(block,' ', street_name) as address 
FROM xp_pn_resale 
where street_name like '%ANG MO KIO%';

我得到这样的结果

在此处输入图像描述

如您所见,那里有null值,也有一些postal_code值,因为我根据搜索的内容手动更新它们。我只想自动填充postal_code从其他表获得的查询。

这是我的 xp_guru_properties 表,我写了这样的查询,以便向您展示

SELECT property_name as GURU_PROEPRTY_NAME,
property_type as GURU_PROPERTY_TYPE ,
JSON_UNQUOTE(JSON_EXTRACT(xp_guru_properties.json, '$.postcode') )as GURU_POSTCODE
FROM xp_guru_properties
where property_type like '%HDB%' AND property_name like '%ang mo kio%';   

结果是这样的

在此处输入图像描述

xp_guru_properties在我将其property_type命名为 .blockstreet_nameGURU_PROPERTY_NAME

如您所见,有一个名为 的虚拟列GURU_POSCODE。该列的值是我postal_code要从表中填写的列xp_pn_resale。我是手动更新postal_code

UPDATE xp_pn_resale 
SET postal_code = 560110 
WHERE street_name LIKE '%ANG MO KIO%' 
AND block = 110

这对我来说很乏味。有谁知道我如何根据我显示的查询自动更新它?帮助将被appriciated。

编辑:我写了一个JOIN这样的查询,但这是Lingkong Tiga我手动填写所有记录的记录postal_code

select distinct 
JSON_UNQUOTE(json_extract(g.json, '$.postcode')) postcode,
JSON_UNQUOTE(json_extract(g.json, '$.name')) name,
JSON_UNQUOTE(json_extract(g.json, '$.streetnumber') )streetnumber,
p.block, p.street_name, p.postal_code
from xp_pn_resale p
inner join xp_guru_properties g 
    on g.property_name = concat(p.block, ' ', p.street_name)
    where g.property_type like '%HDB%' AND g.property_name like '%Lengkong Tiga%'

我得到了这样的结果 在此处输入图像描述

标签: mysqlsqldatabase

解决方案


加入两个表并更新。

UPDATE xp_pn_resale AS r
JOIN xp_guru_properties AS p ON concat(r.block,' ', r.street_name) = p.property_name
SET r.postal_code = JSON_UNQUOTE(JSON_EXTRACT(xp_guru_properties.json, '$.postcode') )
WHERE r.street_name like '%ANG MO KIO%'
AND p.property_type like '%HDB%' AND p.property_name like '%ang mo kio%'
AND r.postal_code IS NULL

推荐阅读