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

PostgreSQL左连接后如何避免重复数据

解决SQL查询中的重复数据问题

问题分析

你的原查询用OR连接关联条件,会导致同一个f_lab记录被多次匹配——比如一条fac_vis行的sending_id和receiving_id会分别关联到f_lab,生成两条重复记录;同时如果多条fac_vis行指向同一个receiving_id,也会重复输出该id的f_lab数据。

解决方案

以下两种方法都能确保每个fac_id对应的f_lab数据只返回一次:

方法1:用UNION合并结果

UNION会自动去除重复行,刚好满足需求:

-- 获取目标sending_id自身的f_lab数据
SELECT fl.*
FROM f_lab fl
WHERE fl.fac_id = '1'

UNION

-- 获取所有关联receiving_id对应的f_lab数据
SELECT fl.*
FROM fac_vis fv
JOIN f_lab fl ON fl.fac_id = fv.receiving_id
WHERE fv.sending_id = '1';

方法2:先收集去重后的目标ID列表,再查询

先通过子查询把需要的fac_id(目标sending_id + 所有关联的receiving_id)去重,再关联f_lab:

SELECT fl.*
FROM f_lab fl
WHERE fl.fac_id IN (
    -- 合并目标ID和关联ID并去重
    SELECT '1' AS fac_id
    UNION
    SELECT fv.receiving_id
    FROM fac_vis fv
    WHERE fv.sending_id = '1'
);

说明

两种方法核心都是先确保要查询的fac_id列表没有重复,再从f_lab获取对应数据,避免了原查询中因多条件关联导致的重复问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:10:02