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

如何使用DISTINCT让两表关联差集查询结果按pair字段去重

问题原因

  1. WHERE条件优先级错误:SQL中AND优先级高于OR,你的原查询条件实际执行逻辑为a.pair_id IS NULL OR (b.id IS NULL AND b.exchange_active = 'true'),不符合你查询差异数据的预期,需要给OR两侧的判断加括号。
  2. 重复数据产生:当同一个pair对应多条匹配记录时,就会返回重复的pair结果,你可以通过DISTINCT ON(PostgreSQL特有)或GROUP BY实现按pair去重。

修正后查询语句

方案1:PostgreSQL环境用DISTINCT ON(推荐,可自定义同pair下保留哪条记录)

该语法会直接按括号内的字段去重,每个pair仅返回第一条匹配记录:

SELECT DISTINCT ON (b.pair) b.id, b.pair, b.exchange_id
FROM order_splits_config a
FULL OUTER JOIN active_pairs b
ON a.pair_id = b.id
WHERE (a.pair_id IS NULL OR b.id IS NULL)
AND b.exchange_active = true
-- 可调整ORDER BY规则指定同pair下的保留逻辑,如下为取id最小的记录
ORDER BY b.pair, b.id ASC;

方案2:通用SQL环境用GROUP BY

适合所有支持标准SQL的数据库,通过聚合函数指定同pair下其他字段的取值规则:

SELECT MIN(b.id) AS id, b.pair, MIN(b.exchange_id) AS exchange_id
FROM order_splits_config a
FULL OUTER JOIN active_pairs b
ON a.pair_id = b.id
WHERE (a.pair_id IS NULL OR b.id IS NULL)
AND b.exchange_active = true
GROUP BY b.pair;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:27:02