在子查询(MS SQL)中使用WITH

北本

我正在尝试在子查询中执行一些递归操作,但似乎无法使用WITH-我错过了一些东西吗?或者是否有解决方法?

WHERE swn.stocknode_id in 
(
    WITH Hierachy(stocknode_id, short_desc, PARENTNODE_ID, level)

    AS

    (
        SELECT 
            a.stocknode_id,
            0 AS level

        FROM stock_website_node AS a  

        WHERE a.short_desc = 'XXXXXXXX'
        AND a.PARENTNODE_ID = 0

        UNION ALL

        SELECT 
            a.stocknode_id,
            ch.level + 1

        FROM stock_website_node AS a

        INNER JOIN Hierachy ch
        ON a.PARENTNODE_ID = ch.stocknode_id
    )

    SELECT 
        stocknode_id

    FROM Hierachy

    WHERE level > 0
) 

我遇到了:

Incorrect syntax near the keyword 'WITH'.

拉杜·格奥尔基(Radu Gheorghiu)

公用表表达式必须在顶层。

您需要将CTE从WHERE子句中删除,并WHERE像下面这样引用stocknode_id

WHERE swn.stocknode_id in (SELECT stocknode_id FROM Hierachy WHERE level > 0)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章