PostgreSQL 从三个不同的列中选择唯一值

标签 postgresql unique

我有一个 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 表是最大的表,有 1 亿行。

最佳答案

假设使用 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 从三个不同的列中选择唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45644354/

相关文章:

java - 哪个 Java 线程负责 PostgreSQL 数据库进程?

sql - 如何沿多条路径进行图遍历

algorithm - 如何从用户输入生成唯一的字符串?

mysql - 外键力独特

swift - 如何快速从 Realm 数据库中获取唯一值

linux - 在从 Windows 托管数据库集群创建的 Linux 上恢复 pg_basebackup

java - 如何将字符串转换为 GUID

sql - 有条件地选择 postgresQL 中的列

Python:有效计算字典列表中键的唯一值的数量

mysql - 如何仅对 MySQL 中的数据子集强制执行区分大小写的唯一索引?