2013-02-08 71 views
0

我想更新列URL的所有行測試,但我得到以下錯誤,從下面的查詢有什麼不對的SQL代碼

#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

爲什麼在這裏使用子查詢? – bernie 2013-02-08 20:15:27

+1

要找到導致錯誤的問題,請先運行子查詢。如果它運行,然後從id(in subquery)中的路徑運行select id。如果運行成功,則問題在於更新行。 – 2013-02-08 20:32:49

回答

4

這裏沒有語法錯誤,我可以看到。我在MySQL 5.5上進行了測試,語句解析得很好。

我懷疑你可能在b.IDFROM之間有一個非ASCII空白字符。嘗試刪除這兩個令牌之間的所有空格和換行符,然後重新插入一個純空格。

但是這並沒有解決下一個問題:MySQL不支持在單個查詢中從同一個表中更新表和SELECT。所以你不能以你的方式使用子查詢。這就是爲什麼其他答案建議使用多表UPDATE。

另一種可能性是您沒有分享您正在運行的真實查詢。 Stack Overflow上的很多人都在尋求幫助,但是他們已經修改了查詢以在他們的問題中發佈,以使其更簡單或者隱藏專有信息。

請不要只說「它不起作用」。這並不能幫助我們改進我們的答案。給出錯誤信息(如果有的話),並確保顯示正好是您輸入的語句。

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小提琴中的數據模型以顯示您遇到的麻煩,並且pos t一個鏈接。

+0

仍然不起作用 – user2041213 2013-02-08 20:20:32

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' 
+0

@ C.O.D.E ..它仍然無法正常工作..這可能是因爲要更新的值是NULL? – user2041213 2013-02-08 21:10:44