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

UNION操作判定结果行DISTINCT的依据:基于主键还是所有列?

官方手册说明:
UNION 实际上会将 query2 的结果追加到 query1 的结果之后(但不保证实际返回的行顺序如此)。此外,除非使用 UNION ALL,否则它会像 DISTINCT 一样消除结果中的重复行。

PostgreSQL UNION 去重判定标准

PostgreSQL 中 UNION(不含 ALL)的去重判定完全基于查询返回的所有列,和原表的主键没有任何关联。

具体规则是:当两行数据的每一列对应值都完全相等时,就会被判定为重复行,进而被合并(仅保留一行)。哪怕两行来自不同的表,只要查询结果的所有列值完全一致,就会被视为重复而去除。

举个实际例子:
假设表 t1 存在数据 (1, 'apple'),表 t2 存在数据 (1, 'apple'),执行语句 SELECT id, fruit FROM t1 UNION SELECT id, fruit FROM t2,最终结果只会返回一行 (1, 'apple');如果执行的是 SELECT id FROM t1 UNION SELECT id FROM t2,只要两行的 id 值相同,就会被去重,和原表的其他字段或主键无关。

内容的提问来源于stack exchange,提问作者Julio Marins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:16:04