更新具有重复条目的行

时间:2010-09-18 18:25:49

标签: sql mysql database mysql-error-1093

我的情况与this other question相同,但我不想选择行,我想更新这些行。

我使用了solution Scott Saunders made

select * from table where email in (
    select email from table group by email having count(*) > 1
)

这很有效,但我想更改/更新这些条目中的行值,所以我尝试了:

UPDATE `members` SET `banned` = "1" WHERE `ip` IN (
    SELECT `ip` FROM `members` GROUP BY `ip` HAVING COUNT(*) > 1
)

但是我收到了这个错误:

  

您无法指定目标表   “成员”在FROM中更新   条款

2 个答案:

答案 0 :(得分:6)

使用中间子查询来解决1093错误:

UPDATE `members` 
   SET `banned` = '1' 
 WHERE `ip` IN (SELECT x.ip
                  FROM (SELECT `ip` 
                          FROM `members` 
                      GROUP BY `ip` 
                        HAVING COUNT(*) > 1) x)

否则,在派生表上使用JOIN:

UPDATE MEMBERS 
  JOIN (SELECT `ip` 
          FROM `members` 
      GROUP BY `ip` 
         HAVING COUNT(*) > 1) x ON x.ip = MEMBERS.ip
   SET banned = '1' 

答案 1 :(得分:0)

此错误表示您无法根据members表的条件更新members表。在您的情况下,您尝试根据members表的子查询更新members表。在此过程中,您正在更改该表。把它想象成鸡蛋悖论之前的鸡。

您需要创建一个临时引用表或保存/粘贴ip范围才能运行该更新语句。