在PostgreSQL中连接varchar [],保留不同的值

时间:2016-06-21 01:11:05

标签: postgresql psql

我有一个包含网络资产的数据库,每个资产都有多个主机名。有时候,我们会错误地为同一台机器创建两条记录,然后必须"合并"这些资产。其中一部分是组合他们的主机名列表。

我目前的解决方案是将合并资产的hostnames字段设置为以下选择:

SELECT array_agg(DISTINCT host)
FROM (
  SELECT unnest(hostnames)
  FROM asset
  WHERE asset.id IN (?, ?)
) AS bothassets(host);

(见SQL Fiddle

是否有更清晰的方式来表示相同的"独特的数组值" PSQL中的逻辑?组合数组的顺序对我来说并不重要,但我不能两次包含相同的值。

1 个答案:

答案 0 :(得分:1)

我不认为有更清洁的方式。

只有一点点:

SELECT ARRAY(
  SELECT DISTINCT unnest(hostnames)
  FROM asset
  WHERE asset.id IN (?, ?)
  -- ORDER BY 1
);