我有一个查询,它工作,通过它我得到类别子集。
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子句或更改跟踪上下文子句,则必须用分号终止前面的语句。
不正确的语法靠近')'.
发布于 2021-01-31 23:30:42
您可以通过使用联接来删除:
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之间有一个真正的约束,那么删除就不会那么简单--如果删除尝试在子记录之前处理父记录,那么您可能会遇到违反约束的情况。
发布于 2021-01-31 23:12:24
查询开始时使用CTE,如下所示:
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
FROM TB_Category
WHERE nid in (
SELECT p.nid
from TB_Category p
inner join cte ct on ct.nid = p.nid
)
https://stackoverflow.com/questions/65988283
复制相似问题