0

我的情况与其他问题相同,但我不想选择行,我想更新这些行。

我使用了Scott Saunders 提出的解决方案

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 子句中指定目标表“成员”进行更新

4

2 回答 2

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' 
于 2010-09-18T18:36:57.780 回答
0

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

您需要制作一个临时参考表或保存/粘贴 ip 范围才能运行该更新语句。

于 2010-09-18T18:32:01.690 回答