mysql - 在 mysql 中使用 subselect 更新列时遇到问题

标签 mysql sql sql-update subquery

我的 mysql 数据库中有重复项,我可以通过以下查询找到这些重复项:

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”

有人对此有解决方案吗?

最佳答案

使用加入:

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

关于mysql - 在 mysql 中使用 subselect 更新列时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51911723/

相关文章:

java - 在 UPDATE 查询中设置 NULL 值,JDBC

mysql - 当某些字段为 NULL 时使用 concat 更新

php - 如果 from_user 已经发送了消息,如何忽略其他消息?

java - 在 jOOQ 中插入...使用枚举进行选择

php - 如何知道MySQL更新命令是否找到了记录?

sql - SSRS 远程错误已启用但不起作用

sql - 获取具有条件的关联记录数

Mysql 在现有表中插入数据。如果数据已经存在,如何自动为数据提供新的ID

java - 如何使用Liferay从MySQL检索jsp中的数据?

php - Laravel 5.2 Eloquent ORM hasManyThrough