2016-01-06 91 views
0

我的表:SQL語法錯誤的JOIN

 USERS_1:        USERS_2: 
    +------------+---------+  +------------+---------+ 
    | id  |username |  | username |claimedBy| 
    +------------+---------+  +------------+---------+ 
    |  4  | pitiqu |  | myUsername | NULL |<- this should become 4 
    +------------+---------+  +------------+---------+ 

MY SQL:(字面上的MySQL)

UPDATE UL 
SET UL.claimedBy = US.username 
FROM USERS_1 as UL 
INNER JOIN USERS_2 as US 
ON US.id = 4 
where UL.username="myUsername" 

這可能很明顯,我想設置表2的claimed_by(爲用戶名「myUsername」)轉換爲表1中id = 4處的用戶名「pitiqu」。

如果所有「u sername「令人困惑。希望表和SQL清除我的問題。

彈出了錯誤:

#1064 - 你有一個錯誤的SQL語法;檢查對應於您的MySQL服務器版本的手冊,以便在'FROM USERS_1'作爲UL INNER JOIN USERS_2作爲US ON US.id = 4使用'UL'在第3行時使用的正確語法

爲什麼會發生這種情況.. 。 任何人?

編輯:不好意思的語法。我一直在嘗試使用THIS示例,並在編輯它時刪除了SET。

回答

3

你可以使用這樣的更新查詢:如果你想加入

update 
    USERS_2 
set 
    claimedBy = (SELECT username FROM USERS_1 WHERE id=4) 
where 
    username="myUsername" 

中,正確的語法是這樣的但是在這個特定的上下文中它沒有多大意義,我建議你使用第一個查詢:

UPDATE 
    USERS_1 as UL INNER JOIN USERS_2 as US ON US.id = 4 
SET 
    UL.claimedBy = US.username 
WHERE 
    UL.username="myUsername" 
+0

這就是我一直在尋找的東西。我知道的第一個例子,但我的目的是現在使用JOIN關鍵字,所以我會堅持第二個例子。 謝謝。 –

1

您在UPDATE查詢中使用FROM。這是完全錯誤的。

重寫這將是如下,利用一個子查詢的一種方式:

UPDATE USERS_2 set claimedBy = (SELECT id from USERS_1 where username = "pitiqu") 
where username="myUsername"; 
+0

哦,這是尷尬,但仍然...我要編輯一個適當的SET,它仍然不會工作。這是我從互聯網上「展示」我的問題。 –

2

這是一個錯誤的語法。你應該使用更新連接,如

UPDATE UL u 
JOIN USERS_2 US ON US.id = 4 
SET u.claimedBy = US.username 
where u.username='myUsername';