在 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
如果 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