我正在尝试在子查询中执行一些递归操作,但是我似乎无法使用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'.

最佳答案

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

您需要将CTE从WHERE子句中删除,然后像这样引用WHERE中的stocknode_id:

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

关于sql-server - 在子查询(MS SQL)中使用WITH,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20289237/

10-12 17:30
查看更多