【问题标题】:MySQL insists that field does not exist, then tells me that it does existMySQL坚持该字段不存在,然后告诉我它确实存在
【发布时间】:2011-11-14 02:48:48
【问题描述】:

CentOS 4 或 5,带有 MySQL 5.0.77:

mysql> UPDATE
   ->  `userTable`
   -> INNER JOIN `anotherTable`
   ->   ON `userTable.userid`=`anotherTable.userid`
   -> SET `userTable.someField`="Jimmy Page"
   -> WHERE `userTable.someField`="Jim Morrison"
   ->   AND `anotherTable.date` < NOW();
ERROR 1054 (42S22): Unknown column 'userTable.someField' in 'field list'
mysql>
mysql> SELECT count(someField) FROM userTable;
+---------------+
| count(someField) |
+---------------+
|          5076 |
+---------------+
1 row in set (0.00 sec)

mysql>

我确实通过鼠标复制/粘贴在终端中将 someField 和 userTable 输入到 SELECT 语句中,所以我知道这不是错字问题。这可能是什么问题?

谢谢!

【问题讨论】:

  • 这似乎是由反勾号引起的。尝试删除它,他们再试一次

标签: mysql sql join sql-update


【解决方案1】:

刻度线用于引用列和表名。使用引号中的点,它不会将其视为部分之间的分隔线。添加几个额外的刻度线以更正它。

 UPDATE
  `userTable`
 INNER JOIN `anotherTable`
   ON `userTable`.`userid`=`anotherTable`.`userid`
 SET `userTable`.`someField`="Jimmy Page"
 WHERE `userTable`.`someField`="Jim Morrison"
   AND `anotherTable`.`date` < NOW();

【讨论】:

  • 或者根本不用反引号
  • 考虑到他们的字段之一是“日期”,他们将需要使用一些反引号。否则,你的权利。确实太多了。
  • fyi date 不是mysql中的保留字。使用保留关键字作为列名或表名时是设计问题
  • 你的权利,在给出的例子中,实际上不需要反引号。
  • 谢谢。这实际上是我使用反引号的第一个项目,正是因为列名使用了保留字。这是我认为我应该养成的习惯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 2018-08-02
  • 1970-01-01
  • 2015-06-16
  • 2016-04-20
相关资源
最近更新 更多