我有一个数据库,其中包含一个名为“ Relations”的表,如下所示:
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
以我的理解,不可能构建出可以给出此结果的查询,但是我不确定,这就是为什么我想知道它。
希望您能理解我的问题,谢谢。
答案 0 :(得分:0)
下面的查询将返回person1及其朋友的朋友列表。
select
distinct personId2
from
relations
where
personId1 in (select distinct personId2 from relations where personId1 = <person_name>)
or personId1 = <person_name>
答案 1 :(得分:0)
这是递归CTE(通用表格表达式)。由于主SELECT查询会递归调用CTE部分,因此它将多次处理查询结果。 CTE是SELECT查询(以WITH开头)的一部分。此代码将返回您要查找的数据子集。
当需要(例如,选择,分页或显示与特定页面链接的页面行等)时,我用它来提高数据访问效率。它在MySQL 8中确实有效。