我的情况与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中更新 条款
答案 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范围才能运行该更新语句。