如果name中的字符串包含来自PostgreSQL中不同表的值,则我希望将字段更新为不同的值:
需要更新的表类型
id | name | type
1 | Google Page | WEBSITE
2 | Yahoo Page | WEBSITE
3 | Facebook Page | WEBSITE
...表Companies,其名称为
id | name
1 | Google
2 | Yahoo
3 | Facebook
4 | Twitter
5 | Stackoverflow
...我试过的
UPDATE types
SET type = 'BUSINESS'
WHERE name LIKE CONCAT((SELECT companies.name from companies), '% Page')但我得到了这个问题:[21000] ERROR: more than one row returned by a subquery used as an expression
发布于 2021-07-14 23:49:39
您可以使用带有现有逻辑的子查询来保留当前逻辑:
UPDATE types t
SET type = 'BUSINESS'
WHERE EXISTS (SELECT 1 FROM companies c
WHERE CONCAT(c.name, ' Page') = t.name);您还可以使用update联接:
UPDATE types t
SET type = 'BUSINESS'
FROM companies c
WHERE t.name = CONCAT(c.name, ' Page');发布于 2021-07-14 23:50:51
您应该使用IN指令:
WHERE name IN (SELECT CONCAT(companies.name, ' Page') name from companies)发布于 2021-07-15 00:16:11
比比较连接字符串要便宜得多:
UPDATE types t
SET type = 'BUSINESS'
FROM companies c
WHERE right(t.name, 5) = ' Page'
AND left(t.name, -5) = c.name;db<>fiddle https://dbfiddle.uk/?rdbms=postgres_13&fiddle=7826ceeced04d85304fa5eb88f4c7801
https://stackoverflow.com/questions/68386156
复制相似问题