是否可以在WHERE子句中使用CTE,例如
SELECT *
FROM Table1
WHERE Table1.PK IN (
WITH Cte AS (
-- root selection (dynamic, generated in code)
SELECT Bla FROM Table2
-- recursive part
UNION ALL
SELECT …..)
SELECT Bla FROM Cte)
我问的原因是我需要使用递归查询,而且在不更新框架的情况下执行此操作的唯一方法是将其放在where子句中。
答案 0 :(得分:3)
不,需要在主SELECT之前定义WITH子句。像这样:
WITH recursive_cte AS (
-- root selection (dynamic, generated in code)
SELECT Bla FROM Table2
-- recursive part
UNION ALL
SELECT …..)
SELECT t.*
FROM TABLE1 t
JOIN recursive_cte rc ON rc.key = t.pk
我还调整了查询以使用JOIN,但你必须注意重复。
答案 1 :(得分:0)
是的,您可以在CTE中应用WHERE CLAUSE。您必须创建表值函数并在表中返回结果。
然后,您可以在任何带有WHERE子句的查询中使用此结果集。
转到链接并找到示例:
http://muhammadnaveed.info/use-cte-query-in-where-clause/
希望这会对你有所帮助。