表A:Id     name          parent_id
     1      山东            0
     2      山东烟台        1
     3      山东烟台牟平    2
     4      山东烟台牟平XX  3 
这是已知表  我的目的是  给我一个名字 比如:山东烟台  然后给我一个参数2 表示需要查询山东烟台下的2级地市  也就是山东烟台牟平和山东烟台牟平XX请问sql改怎么写呢?谢谢!!!sql树查询

解决方案 »

  1.   


    SELECT ID,NAME FROM (
            SELECT LEVEL LVL,ID,NAME FROM TABLE1 START WITH NAME = '山东烟台' CONNECT BY PARENT_ID=ID
    ) T WHERE LVL = 2
      

  2.   

    为什么 我得到的level都是1 呢?
      

  3.   

    为什么 我得到的level都是1 呢?
    那把PARENT_ID和ID位置换一下试试SELECT ID,NAME FROM (
            SELECT LEVEL LVL,ID,NAME FROM TABLE1 START WITH NAME = '山东烟台' CONNECT BY ID=PARENT_ID
    ) T WHERE LVL = 2
      

  4.   

    为什么 我得到的level都是1 呢?
    那把PARENT_ID和ID位置换一下试试SELECT ID,NAME FROM (
            SELECT LEVEL LVL,ID,NAME FROM TABLE1 START WITH NAME = '山东烟台' CONNECT BY ID=PARENT_ID
    ) T WHERE LVL = 2

     SELECT LEVEL LVL,ID,NAME FROM ceshi START WITH NAME = '山东烟台' CONNECT BY ID=PID
    这个sql只得到了这样一条记录
      

  5.   

    为什么 我得到的level都是1 呢?
    那把PARENT_ID和ID位置换一下试试SELECT ID,NAME FROM (
            SELECT LEVEL LVL,ID,NAME FROM TABLE1 START WITH NAME = '山东烟台' CONNECT BY ID=PARENT_ID
    ) T WHERE LVL = 2

     SELECT LEVEL LVL,ID,NAME FROM ceshi START WITH NAME = '山东烟台' CONNECT BY ID=PID
    这个sql只得到了这样一条记录
    少了一个关键字priorSELECT ID,NAME FROM (
            SELECT LEVEL LVL,ID,NAME FROM TABLE1 START WITH NAME = '山东烟台' CONNECT BY PRIOR ID=PARENT_ID
    ) T WHERE LVL = 2
      

  6.   

    为什么 我得到的level都是1 呢?
    那把PARENT_ID和ID位置换一下试试SELECT ID,NAME FROM (
            SELECT LEVEL LVL,ID,NAME FROM TABLE1 START WITH NAME = '山东烟台' CONNECT BY ID=PARENT_ID
    ) T WHERE LVL = 2

     SELECT LEVEL LVL,ID,NAME FROM ceshi START WITH NAME = '山东烟台' CONNECT BY ID=PID
    这个sql只得到了这样一条记录
    少了一个关键字priorSELECT ID,NAME FROM (
            SELECT LEVEL LVL,ID,NAME FROM TABLE1 START WITH NAME = '山东烟台' CONNECT BY PRIOR ID=PARENT_ID
    ) T WHERE LVL = 2

    谢谢!!!