zoukankan      html  css  js  c++  java
  • sql

    我有一个MySQL表,如下所示:

    id | name        | parent_id
    19 | category1   | 0
    20 | category2   | 19
    21 | category3   | 20
    22 | category4   | 21
    ......
    

      

    现在,我想要一个MySQL查询,我只提供id [例如说'id = 19']然后我应该得到它的所有子ID [即 结果应该有ids '20,21,22'] ....而且,孩子们的等级不知道它可以变化....

    另外,我已经有了使用for循环的解决方案.....如果可能的话,让我知道如何使用单个MySQL查询来实现相同的功能。

    解决办法

    1.如果你在MySql 8上,那么使用递归where子句:

    with recursive cte (id, name, parent_id) as (
      select     id,
                 name,
                 parent_id
      from       products
      where      parent_id = 19
      union all
      select     p.id,
                 p.name,
                 p.parent_id
      from       products p
      inner join cte
              on p.parent_id = cte.id
    )
    select * from cte;

    where中指定的值应设置为要选择所有后代的父级的CONNECT BY

    2.对于不支持公用表表达式(最高版本为5.7)的MySql版本,您可以使用以下查询来实现此目的:

    select  id,
            name,
            parent_id 
    from    (select * from products
             order by parent_id, id) products_sorted,
            (select @pv := '19') initialisation
    where   find_in_set(parent_id, @pv)
    and     length(@pv := concat(@pv, ',', id))

    这是一个小提琴。

    此处,where中指定的值应设置为要选择所有后代的父级的CONNECT BY

  • 相关阅读:
    结对项目——四则运算
    关于结对编程的感想
    《诗词大闯关》调查表与调查结果分析
    我的软件工程课目标
    我的软件工程课目标
    软件工程课程建议
    结对编程(二)
    结对编程——四则运算
    结对编程
    《诗词大闯关》问卷调查心得与体会
  • 原文地址:https://www.cnblogs.com/foreversun/p/11401581.html
Copyright © 2011-2022 走看看