Mysql DELETE 不能使用别名? 是我不会用!

今天碰到一个sql问题,就是在delete中加了别名,导致报错了:"[Err] 1064 - You have an error in your SQL syntax; ..."

        简单说下过程,本来是一个简单的delete语句:

delete from table1 where status=2

        后需要增加关联条件,所以在后边追加了where条件,为了关联写着方便为表添加了别名,变为:

        就是这样报错了,提示语法错误,觉得挺纳闷,将delete 换成 select * (通常为了省事,验证sql的时候换成select),没有问题,执行正确。

        百度很多说“mysql delete 不能使用别名”的,去掉别名后果然正常:

 
delete from table1 where status=2
 
and EXISTS (select id from table2 where table2.fid=table1.id)

 

        虽然问题解决了,但是更纳闷了,delete不能用别名?!,当然不是,是我用错了!

 
delete a from table1 a where a.status=2
 
and EXISTS (select b.id from table2 b where b.fid=a.id)

 

        如上,delete使用别名的时候,要在delete和from间加上删除表的别名,这样才是正确的写法。

        DELETE的语法详见(这是MySQL的要求,在oracle上没有)

posted @   漠里  阅读(3885)  评论(1编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示