我正在尝试在MariaDB 10.3.14的DELETE语句中使用CTE(因为CTE对我而言比派生表更舒适),但我似乎无法使其正常工作。 我花了很多时间尝试解决这个问题,但是每次我遇到“语法错误”时,我都不知道为什么。 当我重写命令以使用派生表时,它可以工作。
让我为您展示一个非常简单的示例。 这不起作用(使用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
这没有问题(派生表):
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确实会有所帮助,但我想介绍问题的核心。
谢谢。