我有两个表,分别是xp_pn_resale
和xp_guru_properties
。我想从postal_code
更新列xp_pn_resale
,但是数据来自xp_guru_properties
,它在json对象中,因此我需要提取数据。我试图编写查询,但它没有响应或没有任何输出。有谁知道是什么问题?谢谢
这是我选择的供参考和测试的查询
select r.block, r.street_name,
r.postal_code, p.property_name,
r.property_name as resale_property_name,
JSON_UNQUOTE(JSON_EXTRACT(p.json, '$.postcode') )as postcode
from xp_pn_resale AS r
JOIN xp_guru_properties AS p
ON r.property_name = p.property_name where r.postal_code is null
limit 10
我只希望postcode
是查询中的postal_code
的值,我将限制设置为10,因为当我不做限制时会花费太多时间
这也是我的更新声明
UPDATE xp_pn_resale AS r
JOIN xp_guru_properties AS p ON r.property_name = p.property_name
SET r.postal_code = JSON_UNQUOTE(JSON_EXTRACT(p.json, '$.postcode'))
where r.property_name = p.property_name
上面的查询不执行任何操作,而是继续执行。我不知道我写的查询出了什么问题
我在xp_pn_resale
中获得了800k的数据,在xp_guru_properties
中获得了30k的数据
答案 0 :(得分:1)
首先,您的查询不需要WHERE
子句,因此:
UPDATE xp_pn_resale r JOIN
xp_guru_properties p
ON r.property_name = p.property_name
SET r.postal_code = JSON_UNQUOTE(JSON_EXTRACT(p.json, '$.postcode'));
我可能怀疑两件事之一。第一个是xp_guru_properties(property_name)
上的索引。这对性能很重要。
第二个是在属性表中单个属性有多个匹配项。那真的会减慢速度。
答案 1 :(得分:-1)
尝试此查询
UPDATE xp_pn_resale
INNER JOIN xp_guru_properties
ON xp_pn_resale.property_name = xp_guru_properties.property_name
SET xp_pn_resale.postal_code = JSON_UNQUOTE(JSON_EXTRACT(xp_guru_properties.json, '$.postcode'))
WHERE xp_pn_resale.postal_code is NULL