2011-08-20 29 views
0

我想在MySql表中更新語句 - 只是將數據從一個用戶遷移到第二個用戶。只有具有相同唯一ID devid的行尚未存在時,才應該遷移具體行。更新MySql表 - 在更新過程中測試一個字段的唯一性

,我使用的更新語句是:

update userdata as userdata1 set userid=${newuser} 
where 
    userid=${olduser} and 
    userdata1.devid != 
    (select devid from userdata as userdata2 
    where 
     userdata2.userid = ${newuser} and userdata2.`devid` = userdata1.`devid`) 

MySQL的返回:

You can't specify target table 'userdata' for update in FROM clause 

但是從另一種方式,類似的SELECT語句的作品,或類似的更新語句,當我測試數據在另一張同樣的桌子上工作。那麼這是一些限制,在更新期間不可能在同一張桌面上進行選擇?以及如何管理這個?

感謝,

英德日赫

+0

難道一個'UNIQUE KEY'是相當有幫助嗎? – glglgl

+0

我有UNIQUE KEY約束,但是這隻防止不會發生多次具有相同的DEVID,但是我需要管理更新而不嘗試這樣做,因爲整個查詢將隨着違反約束而失敗。 – sarsonj

回答

0

您可以使用左連接:

UPDATE userdata u1 
LEFT JOIN userdata u2 ON u2.userid = :newuser AND u2.devid = u1.devid 
SET u1.userid = :newuser 
WHERE u1.userid = :olduser 
    AND u2.userid IS NULL; 
+0

(原諒我被動地使用佔位符,不能讓自己使用PHP字符串)。 –

+0

謝謝,這有助於! – sarsonj