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

时间:2009-08-28 10:38:12

标签: mysql sql mysql-error-1054

在尝试执行此更新查询时,我一直收到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' 

12 个答案:

答案 0 :(得分:131)

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

另见MySQL 5 Documentation

答案 1 :(得分:41)

将任何字符串包含在单引号内传递给mysql服务器; e.g:

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

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

答案 2 :(得分:16)

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

由于您只想更新表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);

答案 3 :(得分:3)

在我的情况下,它是由列名末尾的一个看不见的尾随空格引起的。只需检查您是否真的使用“y”或“y”。

答案 4 :(得分:1)

在使用EF代码构建.Net应用程序构建时,我在尝试应用迁移时收到此错误消息,其中包含Sql("UPDATE tableName SET columnName = value");语句。

原来我拼错了columnName。

答案 5 :(得分:1)

只需分享我的经验即可。我遇到了同样的问题。我的查询就像:

select table1.column2 from table1

但是,表1没有column2列。

答案 6 :(得分:1)

在我的例子中,Hibernate 正在寻找蛇形的列,比如 create_date,而数据库中的列是驼峰形的,例如 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

application.yml帮助解决了问题。

答案 7 :(得分:0)

像thi这样的查询也会导致错误

select table1.id from table2

如果在select列中指定了表,并且未包含在from子句中。

答案 8 :(得分:0)

我也遇到相同的错误,我的问题是我在GROUP BY子句中包含了列名,这导致了此错误。因此,从GROUP BY子句中删除了该列,它起作用了!!

答案 9 :(得分:0)

如果它是休眠和JPA。检查您引用的表名和列可能不匹配

答案 10 :(得分:0)

在MySQL数据库上通过LINQ使用GroupBy时出现此错误。问题是GroupBy使用的匿名对象属性与数据库列名称不匹配。通过重命名匿名属性名称以匹配列名称来解决。

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

答案 11 :(得分:0)

只需分享我的经验即可。我遇到了同样的问题。插入或更新语句正确。而且我还检查了编码。该列确实存在。 然后!我发现我在触发器中引用了该列。 您还应该检查触发器,看看是否有任何脚本在引用您遇到问题的列。