当查询中没有别名时,MySQL 错误“先前找到了别名”

Posted

技术标签:

【中文标题】当查询中没有别名时,MySQL 错误“先前找到了别名”【英文标题】:MySQL error "An alias was previously found" when an alias isn't in the query 【发布时间】:2018-01-20 07:46:25 【问题描述】:

我在尝试对数据库执行更新时遇到了一个非常奇怪的错误。这是在使用 mysql 5.7.19-0ubuntu0.16.04.1 的 Ubuntu 16.04 服务器上。查询是:

更新athlet_teamseason SET offkeyreturners = 'test' WHERE athlet_teamseason.id = 29701;

MySQL 错误是:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'offkeyreturners = 'test' WHERE athlet_teamseason.id = 29701' 附近使用正确的语法

我在 phpMyAdmin 中执行此操作,它提供了更多信息:

在分析过程中发现了 2 个错误。

之前找到了一个别名。 (在位置 50 的 " " 附近) 之前发现了一个别名。 (在位置 51 的“'test'”附近)

如果我直接在 phpMyAdmin 用户界面中尝试此更新(搜索记录、编辑字段值、提交表单)它可以工作,并且显示的查询是:

更新athlet_teamseason SET offkeyreturners = '测试' WHERE athlet_teamseason.id = 29701;

这似乎是相同的。但是,如果我在两者之间进行字符串比较,我会得到:

因此,虽然它们看起来相同,但在某处却有所不同。

查询是从数据库中的表创建的,使用连接和引用源表中的单元格。例如:

="UPDATE athlet_teamseason SET offkeyreturners = '"&data!I2&"' WHERE athlet_teamseason.id = "&data!A2&";"

我有成千上万个,它们都产生相同的错误。我已经在旧服务器上做了几十次,可能是 MySQL 5.7 的问题?

【问题讨论】:

我猜你的字段中有一些非打印字符。 谢谢,我也想到了。我用光标键在文本上移动,看看是否能检测到任何内容,但没有运气。 光标键不一定对非空白字符有帮助;您通常可以通过 LENGTH 函数查找您知道自己遇到问题的值的差异,从而获得更好的结果;或者你可能对正则表达式有一些运气。 谢谢,我手动重新输入了我的模板查询,现在它可以工作了。 【参考方案1】:

感谢 Uueerdo,我在查询中消除了非打印字符。

【讨论】:

您可能想展示在您的情况下如何将它们过滤掉,以便对其他人有用。 我放弃了寻找它们。我只是手动重新输入了查询,没有从我的示例查询中复制/粘贴。

以上是关于当查询中没有别名时,MySQL 错误“先前找到了别名”的主要内容,如果未能解决你的问题,请参考以下文章

错误代码:1248。每个派生表都必须有自己的别名 没有找到查询的解决方案

在查询中使用别名时出现“#1054 - 未知列”错误?

在 MySQL 查询的 WHERE 子句中使用列别名会产生错误

5_MySQL_别名和多表连接查询

帮助 MySQL 查询语法:错误 #1066 - 不是唯一的表/别名

PHP/MySQL:在没有别名的联接查询中获取多个同名列? [复制]