【问题标题】:Unknown column in 'field list' error on MySQL Update queryMySQL 更新查询中的“字段列表”错误中的未知列
【发布时间】:2010-11-23 16:34:34
【问题描述】:

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

【问题讨论】:

    标签: mysql sql mysql-error-1054


    【解决方案1】:

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

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

    ...到这个...

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

    【讨论】:

      【解决方案2】:

      单引号将要传递给MySQL服务器的任何字符串括起来,例如:

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

      请注意,尽管查询用双引号括起来,但您必须将任何字符串括在单引号中。

      【讨论】:

      • 谢谢。我试图弄清楚为什么我在 PHP 中的查询不起作用,我所要做的就是添加单引号。
      • 我知道这是一篇旧帖子,但您能回答为什么必须加上引号吗?
      • @RiCHiE 使用字符串时通常更安全。此外,对我来说将字符串放在引号之间更有意义。例如,当您使用 SHA1 之类的函数时,您可以在内容中添加引号,例如 SHA1('$var')
      • 这对我有用。首先,我尝试使用反引号,但没有成功。
      • 请正确转义所有传入查询的变量!只需使用$name = mysqli_real_escape_string($name) 正确转义引号!
      【解决方案3】:

      在我的例子中,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帮助解决问题。

      【讨论】:

        【解决方案4】:

        只是分享我在这方面的经验。我遇到了同样的问题。我的查询是这样的:

        select table1.column2 from table1
        

        但是,table1 没有 column2 列。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 谢谢。它对我有用。我也遇到了这个问题,问题出在触发器上。
          【解决方案6】:

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

          SELECT table1.id FROM table2
          

          表在列选择中指定且不包含在 from 子句中。

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                【解决方案9】:

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

                【讨论】:

                  【解决方案10】:

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

                  原来我拼错了 columnName。

                  【讨论】:

                  • 有时也拼错了表名。
                  【解决方案11】:

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

                  【讨论】:

                    【解决方案12】:

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

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

                    【讨论】:

                      【解决方案13】:

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

                      另见MySQL 5 Documentation

                      【讨论】:

                      • 当我感到困惑并在我的字符串周围使用双引号而不是单引号时,我遇到了这个问题。
                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-07-21
                      • 2013-10-13
                      • 1970-01-01
                      相关资源
                      最近更新 更多