在 UPDATE 中对来自不同 table 的多个名称使用 LIKE

Use LIKE with multiple names from a different table in UPDATE

如果 name 中的字符串包含来自 PostgreSQL 中不同 table 的值,我希望将字段更新为不同的值:

Table 需要更新的类型

id  |  name          |  type
1   |  Google Page   |  WEBSITE
2   |  Yahoo Page    |  WEBSITE
3   |  Facebook Page |  WEBSITE
...

Table 具有名称

的公司
id  |  name    
1   |  Google
2   |  Yahoo
3   |  Facebook
4   |  Twitter
5   |  Whosebug
...

我试过的

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

您可以使用具有现有逻辑的子查询来保留您当前的逻辑:

UPDATE types t
SET type = 'BUSINESS'
WHERE EXISTS (SELECT 1 FROM companies c
              WHERE CONCAT(c.name, ' Page') = t.name);

您也可以使用更新连接:

UPDATE types t
SET type = 'BUSINESS'
FROM companies c
WHERE t.name = CONCAT(c.name, ' Page');

您应该使用 IN 指令:

WHERE name IN (SELECT CONCAT(companies.name, ' Page') name from companies)

比比较串联字符串便宜得多:

UPDATE types t
SET    type = 'BUSINESS'
FROM   companies c
WHERE  right(t.name, 5) = ' Page'
AND    left(t.name, -5) = c.name;

db<>fiddle here