我有一个查询并且它可以工作,通过它我可以获得类别子集。
with cte as (
Select nid
from TB_Category
where nid = 429
union ALL
select ca.nid
from cte ct
inner join TB_Category ca on ca.parentid = ct.nid
)
SELECT p.nid
from TB_Category p
inner join cte ct on ct.nid = p.nid
要删除选定的类别,我使用以下命令,但它给出了错误:
DELETE FROM TB_Category
WHERE nid in (
with cte as (
Select nid
from TB_Category
where nid = 429
union ALL
select ca.nid
from cte ct
inner join TB_Category ca on ca.parentid = ct.nid
)
SELECT p.nid
from TB_Category p
inner join cte ct on ct.nid = p.nid
)
显示以下错误:
关键字“WHERE”附近的语法不正确。
关键字“with”附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前一条语句必须以分号终止。
关键字“from”附近的语法不正确。
关键字“with”附近的语法不正确。
关键字“with”附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前一条语句必须以分号终止。
')' 附近的语法不正确。
您可以使用连接删除:
WITH cte AS (
SELECT nid
FROM TB_Category
WHERE nid= 429
UNION ALL
SELECT ca.nid
FROM cte ct
INNER JOIN TB_Category ca ON ca.parentid = ct.nid
)
DELETE t
FROM TB_Category t
INNER JOIN cte c ON c.nid = t.nid
但请注意,如果您在 nid 和 parentid 之间有真正的约束,则删除操作不会那么简单 - 如果删除尝试在子记录之前处理父记录,您可能会遇到约束冲突。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句