PostgresSQL 避免左连接后出现重复

问题描述 投票:0回答:1

我是 SQL 新手。 我有2张桌子, 表 1 - fac_vis,其中包含

sending_id
receiving_id
列。 表 2 - f_lab 包含列
fac_id
id
name

我想要实现的是,我有一个

fac_id
。使用该 id,我想获取
fac_vis
中的行,其中列
sending_id
等于 id 并获取关联的
receiving_id

然后转到 f_lab 表并获取 fetched

sending_id
receiving_id

的所有结果

使用以下查询进行了上述尝试

select * from public.fac_vis fv
left join f_lab fl on fl.fac_id = fv.sending_id or fl.fac_id = fv.receiving_id
where fv.sending_facility_id = '1'

问题是

where
子句有 2 个结果,在左连接后,它会为 id 获取两次结果。

如何删除重复项或获取特定 ID 一次。 这是我的小提琴:https://www.db-fiddle.com/f/4TCE1mCLeWxx8x1ihUjBYD/0

sql postgresql left-join
1个回答
0
投票
SELECT * 
FROM fac_vis fv
LEFT JOIN (
    SELECT DISTINCT ON (fac_id) fac_id, id, name
    FROM f_lab
) fl ON fl.fac_id = fv.sending_id OR fl.fac_id = fv.receiving_id
WHERE fv.sending_id = '1';

    SELECT DISTINCT ON (fac_id) fac_id, id, name
    FROM f_lab
© www.soinside.com 2019 - 2024. All rights reserved.