我有一个数据库,其中有一个名为“关系”的表,如下所示:
Relations (PersonId1, PersonId2, RelationTypeId)
主键为(PersonId1, PersonId2, RelationTypeId)
还有另外两个表,引用了外键,但这在这里并不重要。
因此,关系被定义为例如(Mary, Andre, 3),其中3将被引用到另一个表,并且将意味着例如(“朋友”)。
我的要求是看到一个特定的人的所有朋友,但也看到这个人的朋友的朋友,所以不仅是第一层,也是第二层。
例如,这将是关系表
Andre Mary 3
Mary Carl 3
Chris James 3 (irrelevent in our case)所以我想要一个查询,我有Andre的PersonId和RelationTypeId。结果应该是:
Andre Mary 3
Mary Carl 3在我的理解中,不可能构建一个查询来给出这个结果,但我不确定,这就是为什么我想知道它。
希望你能理解我的问题,提前谢谢。
发布于 2019-02-20 06:26:47
下面的查询将返回person1的朋友及其朋友的列表。
select
distinct personId2
from
relations
where
personId1 in (select distinct personId2 from relations where personId1 = <person_name>)
or personId1 = <person_name>发布于 2019-04-05 19:26:47
它是一个递归的CTE (公用表表达式)。它将多次处理查询结果,因为主SELECT查询递归地调用CTE部分。CTE是SELECT查询的一部分(以开头)。这段代码将返回您正在查找的数据子集。
我使用它来提高数据访问效率,当我需要时,例如,选择,分页,或显示与特定页面链接的页行,等等。它在实际的MySQL 8中工作。
https://stackoverflow.com/questions/54775432
复制相似问题