您的浏览器过于古老 & 陈旧。为了更好的访问体验, 请 升级你的浏览器
一位不愿透露姓名的用户 发布于2019年11月28日 22:12 最近更新于 2019年11月29日 13:58

为什么在 SQL DELETE 语句中为数据表设置别名会报错 ?

2392 次浏览 读完需要≈ 2 分钟 SQL

在 MySQL 5.7 中,我准备使用如下 SQL DELETE 语句来删除一个数据表中符合特定条件的数据:

DELETE FROM  my_table t WHERE t.id = 1

奇怪的是,此时 MySQL 数据库响应如下错误:

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't WHERE t.id = 1' at line 1

我仔细检查了SQL语句貌似没有问题,多次尝试后,我发现只要把 数据表的别名 去掉,就可以正常执行,例如:

DELETE FROM  my_table WHERE id = 1

为什么给数据表(Table)加上别名(Alias)就会报错呢?

如果需要编写复杂的 DELETE 语句,为了避免字段冲突,需要使用别名的时候,那又该怎么办呢?

1 个回答

Ready · 5年前

SQL DELETE 这个语句中的别名使用确实是一个比较谜的地方。

MySQL 官方文档 中查找到如下注意事项说明:

If you declare an alias for a table, you must use the alias when referring to the table:

DELETE t1 FROM test AS t1, test2 WHERE ...

简单翻译过来就是:如果你为一个数据表(Table)定义了一个别名(Alias),那么你必须使用该别名来引用对应的数据表

因此,你提问中的 SQL 语句 应该进行如下调整:

DELETE t FROM  my_table t WHERE t.id = 1
已采纳 ? 2 0 0 编辑

撰写答案