首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从两个层次查找儿童用户

从两个层次查找儿童用户
EN

Stack Overflow用户
提问于 2019-12-27 15:19:26
回答 2查看 170关注 0票数 0

我有一个用户表,大多数用户都有列parent_id集,它描述了他父的ID。根据这些信息,我想为当前用户生成一个表,以显示他的所有子用户,同时显示他们的所有子用户(2个级别)。选择所有用户的子查询是最基本的查询,但我也不知道如何在一个查询中选择他们的子查询,我尝试了不同类型的联合,但大多得到了空的或格式错误的结果,我对更复杂的SQL查询不太熟悉。

我用一个最小的例子做了一个SQL Fiddle。因此,我想将用户"BBB“显示为"AAA”的子类,也显示为"CCC",因为它是"AAA“(当前用户)的子女。

谢谢你的帮助

样本数据:

代码语言:javascript
复制
id  | nickname | parent_id
1   |   AAA    |   null
2   |   BBB    |    1
3   |   CCC    |    2

用户AAA期望的结果是:

代码语言:javascript
复制
id  | nickname | parent_id
2   |   BBB         1
3   |   CCC    |    2
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-27 15:22:02

根据你的描述,这可能会做你想做的事:

代码语言:javascript
复制
SELECT u.*
FROM users u
WHERE u.parentid = ?
UNION ALL
SELECT uc.*
FROM users u JOIN
     users uc
     ON uc.parentid = u.id
WHERE u.parentid = ?;
票数 2
EN

Stack Overflow用户

发布于 2019-12-27 15:27:34

将表与被查询用户的id交叉连接:

代码语言:javascript
复制
select u.* 
from users u cross join (select id from users where nickname = 'AAA') p
where u.parent_id = p.id
   or u.parent_id in (select id from users where parent_id = p.id) 

这样,您只提供一次您查询的用户的nickname

演示

结果:

代码语言:javascript
复制
| id  | nickname | parent_id |
| --- | -------- | --------- |
| 2   | BBB      | 1         |
| 3   | CCC      | 2         |
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59502702

复制
相关文章

相似问题

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