2014-05-08 59 views
0

我有兩個表:更新MySQL表值與循環引用

AGENT 
-------- 
agent_id 
user_id 
... 

USER 
----- 
user_id 
agent_id 
user_name 
... 

我不在這裏討論爲什麼這樣做,但我有一個關於幸福的問題能夠將USER.AGENT_ID更新爲正確的值,如果我只知道USER.user_name值(始終是唯一的)。

我已經試過:

update USER U set U.agent_id = 
    (select A.agent_id from agent A where A.user_id = 
    (select tu.user_id from user tu where tu.user_name = 'myusername') 
) 
where U.user_name = 'myusername'; 

但是,這並不工作,給我的錯誤。我應該怎麼做?

+0

您無法更新您選擇的表格。請參閱第3段最後一段:http://dev.mysql.com/doc/refman/5.7/en/update.html您必須運行單獨的選擇查詢,獲取您的ID,然後運行更新 –

回答

0

MySQL不允許從你在UPDATE更新同桌SELECT,但你可以做一個加入多表更新:

UPDATE USER u JOIN AGENT A ON A.user_id = u.user_id 
SET U.agent_id = A.agent_id 
WHERE u.user_name = 'myusername'; 

此外,使用子查詢爲你這樣做可能會抱怨說它不能保證子查詢會返回一個標量值,因爲您是基於搜索非唯一列進行選擇的。