SQL - с оператором в предложении WHERE - PullRequest
3 голосов
/ 17 апреля 2011

HI,

Может ли состояние WITH жить в предложении WHERE?

, например:

SELECT tbl1.name , tbl1.ID  
FROM DBTABLE0001 AS tbl1
WHERE  ( 
    exists(

        WITH H (super, ID, depth) AS 
        ( 
        SELECT ROOT.parent, ROOT.ID , 0 
        FROM DBTABLE0001 ROOT  
        WHERE ROOT.ID = tbl1.ID 

        UNION ALL 

        SELECT PARENT.parent, PARENT.ID , CHILD.depth + 1 
        FROM H CHILD, DBTABLE0001 PARENT 
        WHERE PARENT.ID = CHILD.super 

        )

        SELECT ID 
        FROM H 
        WEHER H.ID = "abcd"
        ORDER BY depth

    ) 
)  

Спасибо, Мо.

1 Ответ

4 голосов
/ 17 апреля 2011

Вы должны разместить свои операторы with в начале вашего запроса.тогда вы можете использовать его везде:

WITH H (super, ID, depth) AS           
            (SELECT ROOT.parent, ROOT.ID , 0 
                  FROM DBTABLE0001 ROOT            
              WHERE ROOT.ID = DBTABLE0001.ID             
              UNION ALL             
              SELECT PARENT.parent, PARENT.ID , CHILD.depth + 1                         FROM H CHILD, DBTABLE0001 PARENT           
                WHERE PARENT.ID = CHILD.super) 

SELECT tbl1.name , tbl1.ID    
    FROM DBTABLE0001 AS tbl1  
    WHERE  (exists(SELECT ID FROM H WEHER H.ID = "abcd"  ORDER BY depth)) 
...