2016-06-21 29 views
1

我有一個包含網絡資產的數據庫,每個資產可以有多個主機名。有時候,我們會錯誤地爲同一臺機器創建兩個記錄,然後必須「合併」這些資產。其中一部分是結合他們的主機名單。在PostgreSQL中連接varchar [],保持不同的值

我當前的解決方案涉及到合併後的資產hostnames字段設置爲以下選擇:

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

(見SQL Fiddle

是否有表示相同的「獨特數組值」一個更清潔的方式PSQL中的邏輯?組合數組的順序對我來說並不重要,但我不能讓它包含兩次相同的值。

回答

1

我不認爲有更清潔的方式。

只有一點點短:

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