--有表test0408如下
CREATE TABLE test0408(id int,name varchar(10),pid int)
GOINSERT INTO test0408
SELECT 1,'aa',2    UNION ALL
SELECT 2,'bb',1    UNION ALL
SELECT 3,'cc',1GO/*想要查到如下数据 
1,'aa',1
1,'aa',2
2,'bb',2
2,'bb',1
3,'cc',3
3,'cc',1
3,'cc',2
*/--用以下查询出现死循环
WITH X AS
(
SELECT *,ID AS IID FROM test0408 UNION ALL
SELECT test0408.*,X.IID FROM test0408 JOIN X ON test0408.ID=X.PID ----这里是不是添加些什么条件防止死循环
)
SELECT * FROM X ORDER BY IID--求达人指点 

解决方案 »

  1.   

    参考这里:http://topic.csdn.net/u/20100404/15/6c440190-12aa-47d3-9c39-058212830b9a.html?5349
      

  2.   

    CTE就是一递归算法
    分为递推跟迭代,有入口跟出口,
    X出现死循环,因为它没有出口
      

  3.   

    CTE是进行想BOM式的查询,看不懂楼主的意思
      

  4.   

    http://topic.csdn.net/u/20100330/23/B2F663B1-0EDF-4847-857E-E75640C90C1A.html
      

  5.   


    CREATE TABLE test(id int,name varchar(10),pid int)
    GOINSERT INTO test
    SELECT 1,'aa',2 UNION ALL
    SELECT 2,'bb',1 UNION ALL
    SELECT 3,'cc',1
    GO;with x as(
    select id,name,id iid,pid from test
    union all
    select t.id,t.name,t.pid,x.pid from test t,x where t.pid=x.id and x.pid<>t.id
    )
    select id,name,iid from x
    union all
    select x.id,x.name,t.id from x,test t where x.pid=t.id and x.iid=t.pid order by id
    /*
    1 aa 1
    1 aa 2
    2 bb 1
    2 bb 2
    3 cc 1
    3 cc 2
    3 cc 3
    */