pRi*_*tLn 6 sql t-sql sql-server
是否可以在 WHERE 子句中使用 CTE,例如
\n\nSELECT * \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)\nRun Code Online (Sandbox Code Playgroud)\n\n我\xe2\x80\x99m 询问的原因是我需要使用递归查询,而目前在不更新框架的情况下执行此操作的唯一方法是将其放在 where 子句中。
\n不可以,WITH 子句需要在主 SELECT 之前定义。像这样:
\n\nWITH 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\nRun Code Online (Sandbox Code Playgroud)\n\n我还调整了查询以使用 JOIN 代替,但您必须注意重复项。
\n