我的mysql数据库中有重复项,可以通过以下查询找到:
select checksum, count(*) c from MY_DATA group by checksum having c > 1;
我得到了大约200个小伙子的名单。我想做的是更新同一表中的一列以将其标记为dups。
我尝试过:
update MY_DATA SET DONT_PARSE=1
where (select count(*) c from MY_DATA group by checksum having c > 1);
我收到错误消息:您无法在FROM子句中指定目标表'MY_DATA'进行更新
有人对此有解决方案吗?
答案 0 :(得分:1)
您的查询似乎也不正确(似乎where子句不完整),因此您可以在子查询上使用INNER JOIN来检索重复的
您可以尝试使用
update MY_DATA m
INNER JOIN (
select checksum, count(*) c
from MY_DATA
group by checksum
having c > 1
) t on t.checksum = m.checksum
SET DONT_PARSE=1
答案 1 :(得分:1)
使用join
:
update my_data d join
(select checksum, count(*) as cnt
from MY_DATA
group by checksum
having cnt > 1
) c
on d.checksum = c.checksum
set DONT_PARSE = 1 ;
不幸的是,MySQL不允许您在update
(或delete
)的子查询中引用正在更新的表。但是,join
通常可用于解决此问题。