我有一个包含网络资产的数据库,每个资产都有多个主机名。有时候,我们会错误地为同一台机器创建两条记录,然后必须"合并"这些资产。其中一部分是组合他们的主机名列表。
我目前的解决方案是将合并资产的hostnames
字段设置为以下选择:
SELECT array_agg(DISTINCT host)
FROM (
SELECT unnest(hostnames)
FROM asset
WHERE asset.id IN (?, ?)
) AS bothassets(host);
(见SQL Fiddle)
是否有更清晰的方式来表示相同的"独特的数组值" PSQL中的逻辑?组合数组的顺序对我来说并不重要,但我不能两次包含相同的值。
答案 0 :(得分:1)
我不认为有更清洁的方式。
只有一点点:
SELECT ARRAY(
SELECT DISTINCT unnest(hostnames)
FROM asset
WHERE asset.id IN (?, ?)
-- ORDER BY 1
);