【发布时间】:2014-08-06 14:38:38
【问题描述】:
我对这段代码有疑问。 我的数据库中有树,我需要选择除节点和他的孩子、孙子等之外的所有节点。 我完成了 WITH 查询 - 它有效。我可以选择节点的所有大家庭。 但是当我尝试执行 SELECT ... WHERE id NOT ID (这是大家庭)时,我遇到了错误...
代码:
Select * from TALBE
where id NOT IN
(
WITH TempTable
AS
(
SELECT ...
UNION ALL
SELECT ...
)
Select id from TempTable;
);
或其他版本
Select * from TALBE
where id NOT IN
(
select id from
(
WITH TempTable
AS
(
SELECT ...
UNION ALL
SELECT ...
)
Select id from TempTable
)
);
在这段代码中,我需要有前 2 行。这不是我的决定 - 必须拥有。
错误:
Msg 156, Level 15, State 1, Line 4
关键字“WITH”附近的语法不正确。
Msg 319, Level 15, State 1, Line 4
关键字“with”附近的语法不正确。如果这个语句是一个公用表表达式、一个 xmlnamespaces 子句或一个更改跟踪上下文子句,则前面的语句必须以分号结束。
Msg 102, Level 15, State 1, Line 14
')' 附近的语法不正确。
【问题讨论】:
-
您不能将 cte 嵌套为子选择。去掉cte就行了,这里不需要。
-
AFAIK
WITH必须始终以;开头(或者当然是您脚本中的第一个语句)-就像@SeanLange 提到的那样,不要尝试嵌套您的WITH变成别的东西
标签: sql sql-server with-statement