如果包含来自其他列的子字符串,则更新记录值
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。
我有两个 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。