PostgreSQL select 来自三个不同列的唯一值
PostgreSQL select uniques from three different columns
我有一个大的 table 100m+ 行和两个较小的 2m 行 ea。所有三个 table 都有一列公司名称,需要发送给 API 进行匹配。我想 select 每列中的字符串,然后组合成一列唯一字符串。
我正在使用此响应的一个版本,但不出所料,性能非常慢。 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
;
关于实现此目标的更高效方法有什么想法吗?
更新:银行 table 是最大的 table,有 1 亿行。
要仅获取所有三个 table 的组合名称列表,您可以 union
将每个 table 的选择组合在一起,如下所示:
select
upper(t.buyer)
from
tenders t
union
select
upper(a.aw_supplier_name)
from
awards a
union
select
upper(b.supplier_source_string)
from
banking b
;
假设使用 PostgreSQL 9.6 并从 rd_nielsen 的回答中借用 select,下面应该给你一个逗号分隔的不同名称的字符串。
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
我有一个大的 table 100m+ 行和两个较小的 2m 行 ea。所有三个 table 都有一列公司名称,需要发送给 API 进行匹配。我想 select 每列中的字符串,然后组合成一列唯一字符串。
我正在使用此响应的一个版本,但不出所料,性能非常慢。 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
;
关于实现此目标的更高效方法有什么想法吗?
更新:银行 table 是最大的 table,有 1 亿行。
要仅获取所有三个 table 的组合名称列表,您可以 union
将每个 table 的选择组合在一起,如下所示:
select
upper(t.buyer)
from
tenders t
union
select
upper(a.aw_supplier_name)
from
awards a
union
select
upper(b.supplier_source_string)
from
banking b
;
假设使用 PostgreSQL 9.6 并从 rd_nielsen 的回答中借用 select,下面应该给你一个逗号分隔的不同名称的字符串。
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