在 PostgreSQL 中连接 varchar[],保持不同的值
Concatenate varchar[]'s in PostgreSQL, keeping distinct values
我有一个包含网络资产的数据库,每个资产可以有多个主机名。有时,我们会错误地为同一台机器创建两条记录,然后以后必须 "merge" 这些资产。其中一部分是合并他们的主机名列表。
我目前的解决方案涉及将合并资产的 hostnames
字段设置为以下内容 select:
SELECT array_agg(DISTINCT host)
FROM (
SELECT unnest(hostnames)
FROM asset
WHERE asset.id IN (?, ?)
) AS bothassets(host);
(见SQL Fiddle)
是否有更简洁的方法来表示 PSQL 中相同的 "unique array values" 逻辑?组合数组的顺序对我来说并不重要,但我不能让它包含两次相同的值。
我认为没有更简洁的方法。
只有一点点:
SELECT ARRAY(
SELECT DISTINCT unnest(hostnames)
FROM asset
WHERE asset.id IN (?, ?)
-- ORDER BY 1
);
我有一个包含网络资产的数据库,每个资产可以有多个主机名。有时,我们会错误地为同一台机器创建两条记录,然后以后必须 "merge" 这些资产。其中一部分是合并他们的主机名列表。
我目前的解决方案涉及将合并资产的 hostnames
字段设置为以下内容 select:
SELECT array_agg(DISTINCT host)
FROM (
SELECT unnest(hostnames)
FROM asset
WHERE asset.id IN (?, ?)
) AS bothassets(host);
(见SQL Fiddle)
是否有更简洁的方法来表示 PSQL 中相同的 "unique array values" 逻辑?组合数组的顺序对我来说并不重要,但我不能让它包含两次相同的值。
我认为没有更简洁的方法。
只有一点点:
SELECT ARRAY(
SELECT DISTINCT unnest(hostnames)
FROM asset
WHERE asset.id IN (?, ?)
-- ORDER BY 1
);