如果包含来自其他列的子字符串,则更新记录值

update record value if contains substring from other column

我有两个 table,一个包含英国所有独特的城镇名称,另一个包含人工输入的居住国家/地区。当然,人类会写 "london, uk" 或 "cardiff, united kingdom" 之类的东西。

我需要合并 country_of_residence 列,因此我创建了一个 table,其中包含英国所有可能的城镇、县、城市和村庄,其中包含近 9000 条记录。

如果列 country_of_residence 的记录包含 table uk_geo_entities 中列 entity 中的任何记录,我想更新该列。

我在这里阅读了很多答案,但他们都试图通过检查或更新 一个字符串 来更新,我需要对列的每条记录执行此操作。

a_table                          uk_geo_entities

country_of_residence | ...       entity | ...        
-------------------- + ...       ------ + ...
london, uk                       london
cardiff, england                 cardiff


UPDATE a_table
SET country_of_residence = 'united kingdom'
FROM (SELECT entity
      FROM uk_geo_entities) b
WHERE country_of_residence LIKE '%'||b.entity||'%';

UPDATE psc_sharing_dodgy_officers
SET country_of_residence = 'united kingdom'
WHERE country_of_residence LIKE '%'||(SELECT entity FROM 
uk_geo_entities)||'%';

运行,但没有任何反应。

完成查询后,我需要查看

a_table                         

country_of_residence | ...          
-------------------- + ...     
united kingdom                       
united kingdom

您可以在 WHERE 子句中使用 EXISTS:

UPDATE a_table a
SET country_of_residence = 'united kingdom'
WHERE EXISTS (
  SELECT entity 
  FROM uk_geo_entities
  WHERE a.country_of_residence LIKE '%' || entity || '%'
)

参见demo