Couchbase中DELETE查询是否支持CTE/WITH子句?报错问题求助
Couchbase中DELETE查询是否支持CTE/WITH子句?报错问题求助
你好呀!我来帮你解决这个Couchbase DELETE加CTE报错的问题~
问题原因
首先明确说:Couchbase的N1QL语法目前不支持在DELETE语句前使用WITH(CTE)子句,这就是你看到下面这个报错的核心原因——
Syntax error at: DELETE (reserved word)
N1QL的语法规范里,WITH子句只能搭配SELECT、INSERT(带SELECT数据源)、MERGE这类语句使用,DELETE并不在允许的范围内,所以语法解析器会直接判定这种写法不合法。
替代实现方案
你的需求是删除example_bucket中状态为inactive的文档,完全可以用子查询嵌套的方式来实现,不需要CTE,具体代码如下:
DELETE FROM example_bucket d WHERE META(d).id IN ( SELECT RAW META(dd).id FROM example_bucket dd WHERE dd.status = "inactive" );
如果你的筛选逻辑特别复杂,也可以先把需要删除的文档ID批量查询出来,再通过批量操作完成删除,但对于大多数常规场景来说,上面的子查询写法已经足够简洁高效了。
备注:内容来源于stack exchange,提问作者axnet
相关产品推荐
相关产品推荐

