在Postgres中,有沒有辦法在連接表連接的表之間執行left join
,並在鏈接表上進行一些過濾?在三個表中使用左連接(使用連接表)
說,我有兩個表,humans
和pets
,我想執行一個查詢,我有人的ID和寵物的名字。如果人的身份證存在,但他們沒有這個名字的寵物,我仍然希望人的行被退回。
如果我不得不從pets
到humans
一個FK關係,這會工作:
select h.*, p.*
from humans as h
left join pets as p on p.human_id = h.id and p.name = 'fluffy'
where h.id = 13
,我會得到一排人13的詳細信息,以及蓬鬆的價值觀。另外,如果人類13沒有一隻叫做'蓬鬆'的寵物,我會得到一排人13的值,以及寵物列的空值。
但,我並沒有直接的關係FK,我有humans
和pets
之間的結合表,所以我想喜歡的查詢:
select h.*, p.*
from humans as h
left join humans_pets_junction as j on j.human_id = h.id
left join pets as p on j.pet_id = p.id and p.name = 'fluffy'
where h.id = 13
它爲所有的返回行人類13的寵物,除了蓬鬆的排外,還有空的柱子。
如果我將p.name = 'fluffy'
添加到WHERE
子句中,該子句將過濾掉所有空行,但也意味着如果人13沒有根本沒有名爲絨毛的寵物,則會獲得0行。
有沒有辦法複製FK風格left join
的行爲,但是與聯結表一起使用?
您的意思是在第二個查詢中選擇h。*,p。*',對嗎? – 2015-02-24 00:02:49
我冒昧解決了推定的錯字。 – 2015-02-24 01:01:35