这是一个比较老的问题了,但是最近要用到,却忘记怎么查了~高手帮帮忙~表table_a
列名    id      parent_id    name
         0          -1        -
         1          0         a
         2          1         b
         3          1         c
         4          1         d
         5          2         e
         6          2         f
         7          3         g
         8          4         h
         9          6         i
        10          8         j
        11          9         k
        12          11        l例子就给这些数据吧,查询要求:
1,查出parent_id=1的所有项;
2,如果某一个id被查出来,那么它的所有子项也要被查出来,如:
   id=3被查出来,那么parent_id=3的所有项也要被查出来;请高手们讨论一下:
1,哪种方法查询sql语句最简单?
2,哪种方法查询sql语句效率最高?请大家写出自己的能够执行的并且结果正确的sql语句~

解决方案 »

  1.   

    补充一点,数据库是MySql数据库~
      

  2.   

    create table table_a(id int(11) not null, parent_id int(11), name char(1),primary key(id)) engine=innodb 
    default charset=utf8;
    insert into table_a values(0,-1,'-'),
    (1, 0, 'a'),
    (2, 1, 'b'),
    (3, 1, 'c'),
    (4, 1, 'd'),
    (5, 2, 'e'),
    (6, 2, 'f'),
    (7, 3, 'g'),
    (8, 4, 'h'),
    (9, 6, 'i'),
    (10, 8, 'j'),
    (11, 9, 'k'),
    (12, 11, 'l');select * from table_a where parent_id = 1;
    select * from table_a a inner join table_a b on a.id=b.id and a.id=3;
      

  3.   

    to:
    yueliangdao0608((深圳PHPER,MSN:[email protected])) ( ) 我前面的1,2两点是同一项查询要求,其实2是对1的补充,不是你所理解的2个不同查询~抱歉,可能是我说得不够清楚~另外,你的
    select * from table_a a inner join table_a b on a.id=b.id and a.id=3;
    id parent_id name id1 parent_id1 name1
    3 1 c 3 1 c
    查询结果也不是正确的~
    我不要求是所有parent_id=1的正确的结果应该是
    除了id=0的所有项~“递归查询”这点我在题目中已经写明,请大家好好看一下~
      

  4.   

    改正下:我的要求是所有parent_id=1的正确的结果应该是
    除了id=0的所有项~“递归查询”这点我在题目中已经写明,请大家好好看一下~
      

  5.   

    SQL好像不能递归耶,如果表不大的话,可以将表中的数据全部查出来,自己在程序中筛选出所要的数据
      

  6.   

    SQL不支持递归,这个问题用程序解决比用SQL解决更合适
      

  7.   

    sql的procedure和function可以支持递归查询,但到目前还没想出该怎么写!~~
      

  8.   

    SQL是不能递归的,建议你用程序去写