这个SQL代码有什么问题

时间:2013-02-08 20:13:59

标签: mysql sql

我想将列URL的所有行更新为Test,但我从下面的查询中收到以下错误

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM STx AS a LEFT JOIN Routes AS b ON a.RouteID = b.RouteID WHERE a.GroupID ' at line 3

UPDATE Routes SET URL = 'test' 
WHERE ID in (
    SELECT b.ID
    FROM Stx a left JOIN Routes b on a.RouteID = b.RouteID
    where a.GroupID = 39 and a.Status = 'Provisioned'
);

3 个答案:

答案 0 :(得分:4)

我可以看到这里没有语法错误。我在MySQL 5.5上进行了测试,语句解析得很好。

我怀疑在b.IDFROM之间可能有非ASCII空白字符。尝试删除这两个令牌之间的所有空格和换行符,然后重新插入一个普通空格。

但这并不能解决下一个问题:MySQL不支持单个查询中表的UPDATE和同一个表中的SELECT。所以你不能以你的方式使用子查询。这就是为什么其他答案建议使用多表更新。

另一种可能性是您没有共享正在运行的真实查询。 Stack Overflow上的很多人都在寻求查询方面的帮助,但他们已经修改了查询以便在他们的问题中发帖,使其更简单或隐藏专有信息。

请不要只说“它不起作用”。这无助于我们改进答案。提供错误消息(如果有),并确保完全显示您正在键入的语句。

答案 1 :(得分:2)

为什么不呢:

UPDATE Routes a JOIN Stx b ON (a.routeid = b.routeid)
 SET a.URL = 'test'
where b.groupid = 39 and b.status = 'Provisioned'

I created an example SQL Fiddle here.

如果您尝试做一些不同的事情,可以请发布您的真实查询,或者在SQL小提琴中更改数据模型以显示您遇到的麻烦,并发布一个链接。< / p>

答案 2 :(得分:0)

   UPDATE Routes AS b
    JOIN Stx AS a ON a.RouteID = b.RouteID
    SET b.URL = 'test'
    WHERE a.GroupID = 39 and a.Status = 'Provisioned'