• mysql实现ORACLE的connect by prior父子递归查询


    oracle中有connect by prior ,可以实现父子递归查询。而mysql中没有这种功能,但我们可以变通实现。

     比如一个表:

    Table Name: tb_Tree
    
    Id | ParentId | Name
    --------------------
    1  | 0        | Fruits
    2  | 0        | Vegetables
    3  | 1        | Apple
    4  | 1        | Orange
    5  | 2        | Cabbage
    6  | 2        | Eggplant

    我们需要知道某个ID的所有下级。

    以下这个查询,可以列出所有水果蔬菜的四层上级ID,如果没有四级,则相应的parentid为Null。(你也可以扩展级数)

    select id,name,parentid 
    ,(select parentid from tb_tree where id=t.parentid) parentid2 
    ,(select parentid from tb_tree where id=(select parentid from tb_tree where id=t.parentid)) parentid3 
    ,(select parentid from tb_tree where id=(select parentid from tb_tree where id=(select parentid from tb_tree where id=t.parentid))) parentid4 
    from tb_tree t 

    于是我们很方便查到我们所要的结果,比如要查fruits的所有children:
    select id ,name from (
            select id, name, parentid
            ,(select parentid from tb_tree where id=t.parentid) parentid2
            ,(select parentid from tb_tree where id=(select parentid from tb_tree where id=t.parentid)) parentid3
            ,(select parentid from tb_tree where id=(select parentid from tb_tree where id=(select parentid from tb_tree where id=t.parentid))) parentid4 
            from tb_tree t) tt
        where ifnull(parentid4,0)=1 or ifnull(parentid3,0)=1 or ifnull(parentid2,0)=1 or ifnull(parentid,0)=1
    
    
  • 相关阅读:
    java-异常体系
    LinkedList (队列、栈实现还没看(打算学会使用方法即可)、另外两篇参考文章还没看)
    java面试题
    javascript function前面的符号!~-
    8.1 Java自学
    7.31 Java自学
    JAVA学习日报 8.1
    JAVA学习日报 7.31
    【C++】类-基础知识
    【机器学习】HMM
  • 原文地址:https://www.cnblogs.com/yingjiang/p/4749290.html
Copyright © 2020-2023  润新知