首页 > 解决方案 > 如何正确使用“with”命令

问题描述

我有一个查询并且它有效,通过它我得到类别子集。

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 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。

')' 附近的语法不正确。

标签: sqlsql-servertsqlcommon-table-expression

解决方案


在查询开始时使用 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
)

推荐阅读