MySQLUpdate 查询中“字段列表”错误中的未知列

当我尝试执行这个更新查询时,总是会出现 MySQL 错误 # 1054:

UPDATE MASTER_USER_PROFILE, TRAN_USER_BRANCH
SET MASTER_USER_PROFILE.fellow=`y`
WHERE MASTER_USER_PROFILE.USER_ID = TRAN_USER_BRANCH.USER_ID
AND TRAN_USER_BRANCH.BRANCH_ID = 17

这可能是一些语法错误,但我尝试使用内部连接代替,并进行了其他修改,但我一直得到相同的信息:

Unknown column 'y' in 'field list'
1020400 次浏览

尝试为“ y”使用不同的引号,因为标识符引号字符是反勾(‘)。否则 MySQL“认为”您指向一个名为“ y”的列。

参见 MySQL 8文档

对于值、字符串等,请使用双引号/单引号。 仅对列名使用反勾。

您可以检查引号的选择(对值、字符串等使用双/单引号,对列名使用反勾)。

因为您只想更新表 master_user_profile,所以我建议使用嵌套查询:

UPDATE
master_user_profile
SET
master_user_profile.fellow = 'y'
WHERE
master_user_profile.user_id IN (
SELECT tran_user_branch.user_id
FROM tran_user_branch WHERE tran_user_branch.branch_id = 17);

单引号中包含要传递给 MySQL 服务器的任何字符串,例如:

$name = "my name"
$query = " INSERT INTO mytable VALUES ( 1 , '$name') "

请注意,虽然查询是用双引号括起来的,但是 必须的会在 单引号中括起任何字符串。

在我的例子中,它是由列名末尾的一个不可见的尾随空间引起的。只要检查你是否真的使用“ y”或“ y”代替。

这样的查询也会导致错误:

SELECT table1.id FROM table2

其中表在列选择中指定,而不包括在 from 子句中。

在工作的时候。Net 应用程序首先用 EF 代码构建,当我试图应用我的迁移时,我得到了这个错误消息,我有一个 Sql("UPDATE tableName SET columnName = value");语句。

原来我把栏名拼错了。

我也得到了同样的错误,在我的情况下的问题是,我包括在 GROUP BY子句的列名称,它造成了这个错误。因此,从 GROUP BY子句中删除了列,并且它工作了! ! !

如果是 hibernate 和 JPA。请检查所引用的表名和列可能不匹配

我在 MySQL 数据库上通过 LINQ 使用 GroupBy 时出现了这个错误。问题是 GroupBy 使用的匿名对象属性与数据库列名不匹配。通过将匿名属性名重命名为与列名匹配来修复。

.Select(f => new
{
ThisPropertyNameNeedsToMatchYourColumnName = f.SomeName
})
.GroupBy(t => t.ThisPropertyNameNeedsToMatchYourColumnName);

只是分享一下我的经验。我也有同样的问题。Insert 或 update 语句正确。我还检查了编码。列确实存在。 然后,我发现我在引用我的触发器里的列。 您还应该检查触发器,看看是否有任何脚本正在引用您遇到问题的列。

只是分享一下我的经验,我也有同样的问题,我的问题是:

select table1.column2 from table1

但是,table1没有 column 2 column。

在我的例子中,Hibernate 在一个蛇形框架中寻找列,比如 create_date,而 DB 中的列在一个骆驼形框架中,比如 createDate。 添加

spring:
jpa:
hibernate:
naming: # must tell spring/jpa/hibernate to use the column names as specified, not snake case
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl

帮助解决了这个问题。

在我的示例中,我为 FROM表使用了自定义表别名,但是在字段列表中使用了默认表别名(MyTable) ,而不是自定义表别名(t1)。例如,我需要改变这个..。

mysql> SELECT MyTable.`id` FROM `MyTable` t1;

... 到这个..。

mysql> SELECT t1.`id` FROM `MyTable` t1;

在我的例子中,我在表的触发器中拼错了列名。我花了点时间把错误信息和原因联系起来。