MariaDB 10.3.14 使用 CTE 的 DELETE 语句导致语法错误
MariaDB 10.3.14 DELETE statement using CTE results in Syntax Error
我正在尝试在 MariaDB 10.3.14 中的 DELETE 语句中使用 CTE(因为 CTE table 比派生的 table 更适合我使用),但我似乎无法让它工作。
我花了很多时间试图解决这个问题,但每次我都以 "syntax error" 结束,我真的不知道为什么。
当我重写命令以使用 derived table 时,它起作用了。
让我给你看一个非常简单的例子。
这不起作用(使用 CTE):
with ps as (
select * from product order by id asc limit 10
)
delete p from product p left join ps on p.id = ps.id where ps.id is null
这没有问题(派生 table):
delete p from product p left join (
select * from product order by id asc limit 10
) ps on p.id = ps.id where ps.id is null
我不明白为什么第一个例子给我语法错误。
关于这个主题的文档非常有限。
请理解,这只是向您展示问题的最简单示例。
我有更复杂的场景,使用 CTE 真的很有帮助,但我想展示问题的核心。
谢谢。
https://jira.mariadb.org/browse/MDEV-18511 意味着至少递归 CTE 不能与 DELETES 一起使用。
我正在尝试在 MariaDB 10.3.14 中的 DELETE 语句中使用 CTE(因为 CTE table 比派生的 table 更适合我使用),但我似乎无法让它工作。 我花了很多时间试图解决这个问题,但每次我都以 "syntax error" 结束,我真的不知道为什么。 当我重写命令以使用 derived table 时,它起作用了。
让我给你看一个非常简单的例子。 这不起作用(使用 CTE):
with ps as (
select * from product order by id asc limit 10
)
delete p from product p left join ps on p.id = ps.id where ps.id is null
这没有问题(派生 table):
delete p from product p left join (
select * from product order by id asc limit 10
) ps on p.id = ps.id where ps.id is null
我不明白为什么第一个例子给我语法错误。 关于这个主题的文档非常有限。
请理解,这只是向您展示问题的最简单示例。 我有更复杂的场景,使用 CTE 真的很有帮助,但我想展示问题的核心。
谢谢。
https://jira.mariadb.org/browse/MDEV-18511 意味着至少递归 CTE 不能与 DELETES 一起使用。