可能是壞標題,對不起。 情況是這樣的:Postgres查詢獲取主人和奴隸
用戶表:
id
name
聯繫表:
id
master_id
slave_id
insert into Users values(1,'Jack');
insert into Users values(2,'Marc');
insert into Users values(3,'Susie');
insert into Users values(4,'Paul');
insert into Connections values(1,1,2);
insert into Connections values(2,3,1);
insert into Connections values(3,3,4);
利用上述的插入,傑克有馬克作爲從站。 但他也是蘇茜的奴隸。甚至保羅是蘇茜的奴隸。
現在我需要抓取所有傑克奴隸的人。但我也需要取傑克的主人和那個主人的奴隸。
英語那豈不是傑克,我會得到表中的所有用戶。由於馬克是傑克的奴隸。蘇茜是傑克的主人。 保羅是蘇茜的奴隸(蘇茜是傑克的主人,所以保羅在某種程度上屬於我以某種方式屬於我的用戶列表)。
希望這很清楚。
是否有可能在一個查詢中得到所有這一切? 現在有一個查詢取得所有傑克的奴隸。我建立了一個讓所有傑克的主人。但是,我需要循環每個主人以獲得他的所有奴隸。所有這些都會生成至少3個查詢。 由於我使用node.js和所有的回調函數,它並不是一個好的選擇。 我在想聯盟,但林不知道這是要走的路。而且還有存儲過程,我寧願避免它們。
其實用UNION我可以同時選擇的行,其中林從和那些林主。但我仍然不知道如何獲取主人master_id所在的行。
---編輯---
我現在運行此查詢:
select
"connections"."master_id"
,"connections"."slave_id"
from
"connections"
where
"connections"."master_id" = 1
union
select
"connections"."master_id"
,"connections"."slave_id"
from
"connections"
where
"connections"."slave_id" = 1
union
select
"connections"."master_id"
,"connections"."slave_id"
from
"connections"
where
"connections"."master_id" IN
(select "connections"."master_id" from "connections" where "connections"."slave_id" = 1)
看來它給我預期的結果。 在這種情況下,它將是表連接中的所有行。 你認爲它看起來正確嗎?
什麼是您從樣本數據所期望的輸出? –
我編輯的問題甚至添加我認爲可能是解決方案。 – oderfla