sql - 如何正确使用“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 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。
')' 附近的语法不正确。
解决方案
在查询开始时使用 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
)
推荐阅读
- sparql - 通过端点的 Fuseki 2 事务
- reactjs - React 和 TypeScript,如何正确定义我的组件类的直接属性?
- java - 如何同时响应式地写入和读取文件
- python - 在多个虚拟环境中运行单个 IPython 内核
- postgresql - 在postgis中按中心点、半径、内角和方位角绘制扇区
- plc - 比较 2 个字符数组并在 S7 1500 (PLC) 上找到匹配项
- google-chrome - chrome webstore - 超过3个月的扩展统计
- php - WooCommerce:ACF 价值没有通过产品类别拉动
- java - Liberty Core:未找到 Spring Boot 上下文根
- java - 使用模拟测试的空服务响应