首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL中遍历这个指定的关系模型?

问如何在SQL中遍历这个指定的关系模型?
EN

Stack Overflow用户
提问于 2019-02-20 05:46:34
回答 2查看 52关注 0票数 1

我有一个数据库,其中有一个名为“关系”的表,如下所示:

Relations (PersonId1, PersonId2, RelationTypeId)

主键为(PersonId1, PersonId2, RelationTypeId)

还有另外两个表,引用了外键,但这在这里并不重要。

因此,关系被定义为例如(Mary, Andre, 3),其中3将被引用到另一个表,并且将意味着例如(“朋友”)。

我的要求是看到一个特定的人的所有朋友,但也看到这个人的朋友的朋友,所以不仅是第一层,也是第二层。

例如,这将是关系表

代码语言:javascript
复制
Andre   Mary    3
Mary    Carl    3
Chris   James   3 (irrelevent in our case)

所以我想要一个查询,我有Andre的PersonId和RelationTypeId。结果应该是:

代码语言:javascript
复制
Andre   Mary    3
Mary    Carl    3

在我的理解中,不可能构建一个查询来给出这个结果,但我不确定,这就是为什么我想知道它。

希望你能理解我的问题,提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2019-02-20 06:26:47

下面的查询将返回person1的朋友及其朋友的列表。

代码语言:javascript
复制
select 
   distinct personId2
from 
   relations 
where 
   personId1 in (select distinct personId2 from relations where personId1 = <person_name>) 
or personId1 = <person_name>
票数 0
EN

Stack Overflow用户

发布于 2019-04-05 19:26:47

它是一个递归的CTE (公用表表达式)。它将多次处理查询结果,因为主SELECT查询递归地调用CTE部分。CTE是SELECT查询的一部分(以开头)。这段代码将返回您正在查找的数据子集。

我使用它来提高数据访问效率,当我需要时,例如,选择,分页,或显示与特定页面链接的页行,等等。它在实际的MySQL 8中工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54775432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档