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

  • 相关阅读:
    弱口令扫描.python脚本
    扫描web目录的Python小脚本
    Linux /etc目录重要文件
    linux(centos7)系统优化
    泛型程序设计
    对象包装器与自动装箱
    打包apk时,提示:error: Error: Resource is not public.
    SpringMVC分页实现
    IDEA搭建基于maven 的SSM框架
    ssm框架搭建
  • 原文地址:https://www.cnblogs.com/foreversun/p/11401581.html
Copyright © 2011-2022 走看看