我有一个用户表,大多数用户都有列parent_id集,它描述了他父的ID。根据这些信息,我想为当前用户生成一个表,以显示他的所有子用户,同时显示他们的所有子用户(2个级别)。选择所有用户的子查询是最基本的查询,但我也不知道如何在一个查询中选择他们的子查询,我尝试了不同类型的联合,但大多得到了空的或格式错误的结果,我对更复杂的SQL查询不太熟悉。
我用一个最小的例子做了一个SQL Fiddle。因此,我想将用户"BBB“显示为"AAA”的子类,也显示为"CCC",因为它是"AAA“(当前用户)的子女。
谢谢你的帮助
样本数据:
id | nickname | parent_id
1 | AAA | null
2 | BBB | 1
3 | CCC | 2用户AAA期望的结果是:
id | nickname | parent_id
2 | BBB 1
3 | CCC | 2发布于 2019-12-27 15:22:02
根据你的描述,这可能会做你想做的事:
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 = ?;发布于 2019-12-27 15:27:34
将表与被查询用户的id交叉连接:
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。
见演示。
结果:
| id | nickname | parent_id |
| --- | -------- | --------- |
| 2 | BBB | 1 |
| 3 | CCC | 2 |https://stackoverflow.com/questions/59502702
复制相似问题