(通用表表达式)CTE 作为 WHERE 子句的一部分...可能吗?

pRi*_*tLn 6 sql t-sql sql-server

是否可以在 WHERE 子句中使用 CTE,例如

\n\n
SELECT * \n  FROM Table1 \n WHERE Table1.PK IN (\n   WITH Cte AS (\n    -- root selection (dynamic, generated in code)\n    SELECT Bla FROM Table2\n    -- recursive part\n    UNION ALL\n    SELECT \xe2\x80\xa6..)\n  SELECT Bla FROM Cte)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我\xe2\x80\x99m 询问的原因是我需要使用递归查询,而目前在不更新框架的情况下执行此操作的唯一方法是将其放在 where 子句中。

\n

OMG*_*ies 4

不可以,WITH 子句需要在主 SELECT 之前定义。像这样:

\n\n
WITH recursive_cte AS (\n   -- root selection (dynamic, generated in code)\n   SELECT Bla FROM Table2\n   -- recursive part\n   UNION ALL\n   SELECT \xe2\x80\xa6..)\nSELECT t.*\n  FROM TABLE1 t\n  JOIN recursive_cte rc ON rc.key = t.pk\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还调整了查询​​以使用 JOIN 代替,但您必须注意重复项。

\n