为什么在尝试使用mysql查询更新属性时出现此语法错误?

为什么在尝试使用mysql查询更新属性时出现此语法错误?,mysql,sql,mysql-error-1064,Mysql,Sql,Mysql Error 1064,我试图使用下面的mysql查询更新“Goal”表的“pwd”列,但令人遗憾的是它给出了错误。mysql查询: UPDATE Goal SET pwd = (SELECT MD5(CONCAT(ID, LEFT(phone,3), '$=')) FROM Esubmission); 错误: 1064-您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第1行“FROM Esubmission”附近使用的正确语法 我的桌子如下 Esubmis

我试图使用下面的mysql查询更新“Goal”表的“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|

我在这里测试过,效果很好。MySQL 5.1.37

嗯。。。。我认为您确实需要为每个用户设置密码,在这种情况下,您需要为更新创建一个连接,这样您就可以消除您选择的多个值。。因为按照您的方式,您正在将pwd目标表中的所有值更新为相同的值。。。通过以下方式,您可以根据与ID连接的行更新每个用户pwd。假设在esubmission表中每个usr都有一行,这应该可以工作:


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

电子Submission是否拥有多个记录?如果是这样,那将是一个问题……只是想知道,“;”最后需要?也许你需要像SET pwd=select MD5那样选择它。。。作为Esubmission的md5@天哪,小马是的,有电话、身份证、位置等@Babiker否我试过没有“;”,不起作用。@chustar仍为1064错误。:我的是V.5.1.54,你能解释一下你是怎么做到的吗?@Himalay:如果我试图从同一个表中更新pwd,他可能在'Esubmission'表中只有1或0行,信息如下:更新目标集pwd=从目标中选择MD5CONCATID,$=';我还是会出错!!!:我还是会出错。我还尝试了更新目标集pwd=MD5CONCATg.usr,LEFTg.phone,3,“$=”从目标g到使用目标表本身生成的md5哈希。这是因为ID字段是数字吗?我认为CONCAT函数需要所有字符串……即使它应该隐式地强制转换itAlso,在您尝试的测试中也不需要“FROM goal”:为了完成您尝试的操作,它应该是:UPDATE goal SET pwd=MD5CONCATg.usr,LEFTg.phone,3,“$=”