我想将列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'
);
答案 0 :(得分:4)
我可以看到这里没有语法错误。我在MySQL 5.5上进行了测试,语句解析得很好。
我怀疑在b.ID
和FROM
之间可能有非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'