【问题标题】:trouble updating column with subselect in mysql在mysql中使用子选择更新列时出现问题
【发布时间】:2018-08-18 19:01:28
【问题描述】:

我的 mysql 数据库中有 dup,可以通过此查询找到:

select checksum, count(*) c from MY_DATA group by checksum having c > 1;

我得到一个大约 200 个重复的列表。我想要做的是更新同一个表中的一列以将它们标记为重复。

我试过了:

update MY_DATA SET DONT_PARSE=1 
  where (select count(*) c from MY_DATA group by checksum having c > 1);

我收到错误:您不能在 FROM 子句中指定目标表 'MY_DATA' 进行更新

有人有解决办法吗?

【问题讨论】:

    标签: mysql sql sql-update subquery


    【解决方案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 通常可以用来解决这个问题。

    【讨论】:

      【解决方案2】:

      您的查询似乎也不正确(似乎 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 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-20
        • 2011-09-21
        • 2019-07-04
        • 1970-01-01
        • 2020-03-02
        • 2021-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多