我是 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
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