【问题标题】:Why am I getting this syntax-error while trying to update a attribute using mysql-query?为什么在尝试使用 mysql-query 更新属性时出现此语法错误?
【发布时间】:2011-05-16 08:14:12
【问题描述】:

我正在尝试使用以下 mysql 查询更新“目标”表的“pwd”列,但遗憾的是它给出了错误。 mysql查询:

UPDATE Goal 
   SET pwd = (SELECT MD5(CONCAT(ID, LEFT(phone,3), '$=')) 
                FROM Esubmission);

错误:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“FROM Esubmission)”附近使用正确的语法

我的表格如下所示;

Esubmission
ID        | pnone       | email            |
--------------------------------------------
20378     | 00000000000 | someone@gmail.com|
20379     | 00000000000 | someone@gmail.com|
20380     | 00000000000 | someone@gmail.com|

Goal
usr   | pwd | time|
--------------------
20378 |     |12:09|
20379 |     |15:29|
20380 |     |15:47|

【问题讨论】:

  • Esubmission 是否拥有多条记录?如果是这样,那将是一个问题...
  • 只是想知道,是 ';'最后需要吗?
  • 也许你需要像SET pwd = (SELECT MD5(...) AS md5 FROM Esubmission)一样选择它;
  • @omg-ponies 是的,有电话、身份证、位置等。@Babiker 不我试过没有';',没用..
  • @chustar 仍然 1064 错误.. :(

标签: mysql sql mysql-error-1064


【解决方案1】:

嗯....您选择的多个值..因为您拥有它的方式,您将目标表中 pwd 的所有值更新为相同的值...如下方式,您将每个用户的 pwd 更新为基于加入的行与身份证。假设电子提交表中的每个 usr 都有一行,这应该可以工作:

UPDATE Goal SET pwd = MD5(CONCAT(ID, LEFT(e.phone,3), '$=')) FROM Goal g, Esubmission e where e.ID = g.usr

【讨论】:

  • 我仍然得到错误。我也尝试像 UPDATE Goal SET pwd = MD5(CONCAT(g.usr, LEFT(g.phone,3), '$=')) FROM Goal g 使用目标表生成 md5 哈希本身。
  • 是不是因为ID字段是数字的?我认为 CONCAT 函数需要所有字符串....(即使它应该隐式转换)
  • 另外,在你尝试的测试中你不需要'FROM goal':为了做你尝试过的事情,它将是: UPDATE Goal SET pwd = MD5(CONCAT(g.usr , LEFT(g.phone,3), '$='))
【解决方案2】:

我在这里进行了测试并且工作正常。 MySQL 5.1.37

【讨论】:

  • 我的是 V. 5.1.54,你能解释一下你是怎么做到的吗?
  • @Himalay :他可能在 `Esubmission` 表中只有 1(或 0)行
  • 如果我尝试从相同的表信息更新密码,如下所示:UPDATE Goal SET pwd = (SELECT MD5(CONCAT(ID, '$=')) FROM Goal); 我还是报错!!! :(
猜你喜欢
  • 1970-01-01
  • 2019-11-22
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多