You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PgAdmin的PostgreSQL中从两表取去重值且避免全组合

实现方法

要实现表1去重后的Column B与表2去重后的Column C按行一一对应,核心思路是给两个去重后的数据集分别添加行号,再通过行号关联,避免笛卡尔积。具体操作如下:

核心逻辑拆解

  • 先对两张表的目标字段做去重处理,同时用row_number()窗口函数生成连续行号,行号是后续关联的关键
  • 基于行号将两个结果集做关联,就能得到一一对应的结果,而非全量组合

完整SQL示例

假设你的表名分别为table1和table2,目标字段为B和C:

WITH distinct_b AS (
    SELECT DISTINCT B, row_number() OVER (ORDER BY B) AS rn
    FROM table1
),
distinct_c AS (
    SELECT DISTINCT C, row_number() OVER (ORDER BY C) AS rn
    FROM table2
)
SELECT db.B, dc.C
FROM distinct_b db
JOIN distinct_c dc ON db.rn = dc.rn;

关键细节说明

  • ORDER BY B和ORDER BY C是为了保证行号生成顺序稳定,如果你需要自定义对应规则(比如按数据插入时间排序),直接修改ORDER BY后的字段即可
  • 如果两个去重后的数据集行数不一致,JOIN会只返回行数较少的那部分对应结果;若要保留所有行(行数多的一侧补空值),可以把JOIN替换成FULL OUTER JOIN

内容的提问来源于stack exchange,提问作者G Nisan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:27:32