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


127

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

Answers:


167

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

另请参见MySQL 5文档


当我感到困惑时,我在使用字符串时使用双引号而不是单引号。
Tripleee '18

48

用单引号将要传递给mysql服务器的所有字符串括起来;例如:

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

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


谢谢。我试图弄清楚为什么我的PHP查询无法正常工作,我所要做的就是添加单引号。
RiCHiE '16

1
我知道这是一篇过时的文章,但是您能回答为什么必须加引号吗?
RiCHiE '16

@RiCHiE使用字符串时通常更安全。另外,对我来说,在引号之间插入字符串更有意义。例如,当您使用SHA1之类的功能时,您会在内容中加引号,例如SHA1('$var')
George George

这对我有用。首先,我尝试使用反引号,但没有运气。
radbyx

请正确转义所有传递给查询的变量!只是使用$name = mysqli_real_escape_string($name)正确地转义报价!
Le'nton

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);


2

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

原来我拼错了columnName。


1

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


1

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

select table1.column2 from table1

但是,表1没有column2列。


0

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


0

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


0

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

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

0

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

SELECT table1.id FROM table2

该表在选择列中指定,但不包含在from子句中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.