我有一张100m+行的大桌子和两张2m行的小桌子。这三个表都有一列公司名称,需要发送到API进行匹配。我想从每一列中选择字符串,然后组合成一列唯一的字符串。
我正在使用这个响应的一个版本,但毫不奇怪,性能非常慢。Combined 2 columns into one column SQL

SELECT DISTINCT
    unnest(string_to_array(upper(t.buyer) || '#' || upper(a.aw_supplier_name) || '#' || upper(b.supplier_source_string), '#'))
FROM
    tenders t,
    awards a,
    banking b
;

有什么更有效的方法来实现这个目标吗?
更新:banking表是最大的表,有100m行。

最佳答案

假设PostgreSQL 9.6并借用rd nielsen的答案,下面应该给您一个逗号分隔的不同名称字符串。

WITH cte
AS (
    SELECT UPPER(T.buyer) NAMES
    FROM tenders T

    UNION

    SELECT UPPER(A.aw_supplier_name) NAMES
    FROM awards A

    UNION

    SELECT UPPER(b.supplier_source_string) NAMES
    FROM banking b
    )
SELECT array_to_string(ARRAY_AGG(cte.names), ',')
FROM cte

关于postgresql - PostgreSQL从三个不同的列中选择唯一性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45644354/

10-11 18:47