更新MySql表 - 在更新期间测试一个字段的唯一性

时间:2011-08-20 09:51:59

标签: mysql

我正在尝试在MySql表中创建更新语句 - 只是将数据从一个用户迁移到第二个用户。只有当第二个用户尚不存在具有相同唯一ID devid的行时,才应迁移具体行。

我使用的更新语句是:

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语句工作,或类似的更新语句,当我测试另一个同一个表上的数据时也是如此。这是一个限制,在更新期间无法在同一个表上进行选择吗?以及如何管理这个?

谢谢,

英德日赫

1 个答案:

答案 0 :(得分: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;