麻烦在mysql中用subselect更新列

时间:2018-08-18 19:01:29

标签: mysql sql sql-update subquery

我的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'进行更新

有人对此有解决方案吗?

2 个答案:

答案 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通常可用于解决此问题。