mysql 选择其孩子小于2的用户

j9per5c4  于 2023-01-04  发布在  Mysql
关注(0)|答案(2)|浏览(194)

我有这样表结构
| 身份证|用户标识|父代标识|俱乐部|
| - ------| - ------| - ------| - ------|
| 1个|1个||俱乐部1|
| 第二章|第二章|1个|俱乐部1|
| 三个|三个|1个|俱乐部1|
| 四个|四个|第二章|俱乐部1|
| 五个|五个|第二章|俱乐部1|
| 六个|六个|三个|俱乐部1|
| 七|七|三个|俱乐部1|
| 八个|八个|四个|俱乐部1|
| 九|九|四个|俱乐部1|
| 十个|十个|五个|俱乐部1|
| 十一|十一|五个|俱乐部1|
| 十二|十二|六个|俱乐部1|
| 十三|十三|六个|俱乐部1|
| 十四|十四|七|俱乐部1|
| 十五|十五|七|俱乐部1|
我想选择子项小于2的user_id。请参阅上表user 1、2、3、4、5、6和7,两个子项已完成,因此查询应返回8、9、10、11、12、13、14、15
请参阅上表,此处user_id 1有两个子项2和3,user_id 2有子项4和5,依此类推。
我需要选择子项小于2的user_id

sauutmhj

sauutmhj1#

您可以按以下步骤操作:

SELECT user_id 
FROM club_tree
WHERE user_id NOT IN (
    SELECT parent_id
    from club_tree
    where club = 'club1'
    group by parent_id 
    HAVING count(1) >= 2
) 
and club = 'club1';

我们选择不在具有两个以上子女的用户列表中的用户。
这是为了让拥有两个以上孩子的用户:

SELECT parent_id
    from club_tree
    group by parent_id 
    HAVING count(1) >= 2

您可以在这里测试:http://sqlfiddle.com/#!9/eb2c70/3

nwlqm0z1

nwlqm0z12#

您可以使用left join尝试以下查询吗:

SELECT c.user_id
  from club_tree c
  left join 
  (
    select parent_id
    from club_tree
    where club = 'club1'
    group by parent_id 
    HAVING count(1) >= 2
  ) as c2 on c.user_id = c2.parent_id
  where c.club = 'club1' and c2.parent_id is null;

在这里试试:http://sqlfiddle.com/#!9/eb2c70/17

相关问题