从subselect语句结果数组更新select语句

时间:2015-04-16 14:50:36

标签: database postgresql

我有一个我一直在努力的查询,我可以理解为什么它出错了,但是我似乎无法弄清楚如何使一切运转起来。

我的设置看起来像这样。

我有一个包含网站列表的数据库表

table name: websites

column name within websites: 
domain_name
------------------
site1234.mydomain.com
site1235.mydomain.com
site1256.mydomain.com
site1257.mydomain.com
site1258.mydomain.com

我要做的是更改子域部分之后的所有内容,即:.mydomain.com - > .mynewdomain.com

我有查询来获得第一个子域名。

SELECT split_part(domain_name, '.', 1) AS site_name FROM websites;

所以我理解这需要在一个子选择中,但我不确定我错过了什么。我的select / subselect查询看起来像这样。

UPDATE websites SET domain_name = site_name || '.mynewdomain.com' FROM (SELECT split_part(domain_name, '.', 1) FROM websites) AS site_name WHERE domain_name LIKE '%.mydomain.com';

我理解为什么它出错了,因为我的第一个查询返回多行,所以它看到数据不匹配,我知道我需要一些循环遍历subselect中的每个结果并在初始select中使用该值,但是我不知道我需要什么语法来实现这个功能。

非常感谢任何帮助!

干杯,

-H

1 个答案:

答案 0 :(得分:0)

UPDATE websites
SET domain_name = t.site_name || '.mynewdomain.com' FROM
(
    SELECT split_part(domain_name, '.', 1) AS site_name
    FROM websites
) t
WHERE domain_name LIKE '%.mydomain.com';