【发布时间】:2016-09-29 23:33:53
【问题描述】:
可能标题不好,抱歉。 情况是这样的:
用户表:
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);
通过上述插入,杰克将马克作为奴隶。 但他也是苏西的奴隶。 连保罗都是苏西的奴隶。
现在我需要把所有杰克的奴隶都带回来。但我还需要获取杰克的主人和那个主人的奴隶。
在英语中,这意味着对于杰克,我将获得表中的所有用户。因为马克是杰克的奴隶。苏西是杰克的师父。 Paul 是 Susie 的奴隶(Susie 是 Jack 的主人,所以 Paul 在我的用户列表中以某种方式也属于我)。
希望这很清楚。
是否有可能在一个查询中获得所有这些信息? 现在有一个查询获取所有 Jack 的奴隶。我建造了一个来获得所有杰克的主人。但后来我需要循环每个主人来获取他所有的奴隶。所有这些都会产生至少 3 个查询。 由于我使用 node.js 和所有回调的东西,它不是一个很好的选择。 我在考虑 UNION 但我不确定这是要走的路。还有存储过程,我宁愿避免它们。
实际上,使用 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)
它似乎给了我预期的结果。 在这种情况下,这将是表连接中的所有行。 你认为它看起来正确吗?
【问题讨论】:
-
您期望从样本数据中得到什么输出?
-
我编辑了这个问题,甚至添加了我认为可能的解决方案。
标签: sql postgresql