MySQL查询重复数据「终于解决」

MySQL查询重复数据「终于解决」假设有一个用户表 user,数据如下: 1、查询表中 uid 重复的数据 SELECT id, uid, name FROM USER WHERE uid IN (SELECT uid FROM US

MySQL查询重复数据

 

假设有一个用户表 user,数据如下:

MySQL查询重复数据「终于解决」

1、查询表中 uid 重复的数据

SELECT
  id,
  uid,
  name
FROM USER
WHERE uid IN (SELECT
    uid
  FROM USER
  GROUP BY uid
  HAVING COUNT(uid) > 1);

代码100分

MySQL查询重复数据「终于解决」

2、查询表中重复数据,排除最小id

代码100分SELECT
  id,
  uid,
  name
FROM user
WHERE uid IN (SELECT
    uid
  FROM user
  GROUP BY uid
  HAVING COUNT(uid) > 1)
AND id NOT IN (SELECT
    MIN(id)
  FROM user
  GROUP BY uid
  HAVING COUNT(uid) > 1);

MySQL查询重复数据「终于解决」

3、删除表中重复数据,如果是重复数据,则保留id最小的一条

DELETE
  FROM USER
WHERE id IN (SELECT
      u.id
    FROM (SELECT
        id
      FROM USER
      WHERE uid IN (SELECT
          uid
        FROM USER
        GROUP BY uid
        HAVING COUNT(uid) > 1)
      AND id NOT IN (SELECT
          MIN(id)
        FROM USER
        GROUP BY uid
        HAVING COUNT(uid) > 1)) AS u);

4、遇到的问题:

一开始直接使用以下语句删除,报错:You can’t specify target table ‘user’ for update in FROM clause

 

代码100分DELETE
  FROM USER
WHERE id IN (SELECT
      id
    FROM USER
    WHERE uid IN (SELECT
        uid
      FROM USER
      GROUP BY uid
      HAVING COUNT(uid) > 1)
    AND id NOT IN (SELECT
        MIN(id)
      FROM USER
      GROUP BY uid
      HAVING COUNT(uid) > 1));

 

查资料后得知:
因为在 MYSQL 里,不能先 select 一个表的记录,在按此条件进行更新和删除同一个表的记录。
解决办法:
将 select 得到的结果,再通过中间表 select 一遍。
SQL如下:

 

DELETE
  FROM USER
WHERE id IN (SELECT
      u.id
    FROM (SELECT
        id
      FROM USER
      WHERE uid IN (SELECT
          uid
        FROM USER
        GROUP BY uid
        HAVING COUNT(uid) > 1)
      AND id NOT IN (SELECT
          MIN(id)
        FROM USER
        GROUP BY uid
        HAVING COUNT(uid) > 1)) AS u);

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8425.html

(0)
上一篇 2023-02-28 11:30
下一篇 2023-02-28 12:30

相关推荐

  • 查看数据库所有索引_sqlserver 索引

    查看数据库所有索引_sqlserver 索引阅文时长 | 0.45分钟 字数统计 | 784字符 主要内容 | 1、引言&背景 2、声明与参考资料 『MSSQL·查询数据库中所有索引的相关信息』 编写人 | SCscHero

    2023-04-15
    150
  • redis如何保证高可用_mongodb高可用方案

    redis如何保证高可用_mongodb高可用方案redis可以使用哨兵机制和主从架构部署来保证高可用,任何一个实例宕机,自动会进行主备切换。哨兵的含义就是监控redis系统的运行状态。可以启动多个哨兵,去监控redis数据库的运行状态。

    2022-12-20
    156
  • 新特性解读 | 趋近完美的 Undo 空间[通俗易懂]

    新特性解读 | 趋近完美的 Undo 空间[通俗易懂]作者:杨涛涛 资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生…

    2023-02-19
    140
  • Python安装NumPy指南

    Python安装NumPy指南Python是一种流行的编程语言,它拥有一个庞大的支持库。其中一个非常受欢迎的库是NumPy,它是Python数学计算的核心库之一。本篇文章将为您介绍Python安装NumPy的指南,旨在帮助您快速入门。

    2024-09-12
    22
  • Python中实数和整数的差异及应用

    Python中实数和整数的差异及应用在计算机科学中,实数和整数是两种最基本的数据类型。

    2024-04-11
    76
  • Python sys args用法及示例

    Python sys args用法及示例在Python开发中,我们经常需要从命令行获取参数来执行不同的操作。这个时候就需要使用sys模块中的args参数来获取命令行参数,以便根据参数来执行相应的操作。本文将深入探讨Python中sys args的用法及示例。

    2024-04-08
    76
  • Python面向对象编程:创建类及其实例对象

    Python面向对象编程:创建类及其实例对象Python作为一门面向对象编程语言,具有强大的面向对象特性,其中最基本的是创建类和其实例对象。本文将从多个方面对Python面向对象编程中的创建类及其实例对象做详细的阐述。

    2023-12-17
    102
  • mysql设计表注意事项_数据库设计需要考虑的问题

    mysql设计表注意事项_数据库设计需要考虑的问题下面探讨的数据库为MySQL 存储引擎为innodb因为这是最常见的,使用最多的数据库和引擎 什么是页分裂? 这是因为聚簇索引采用的是平衡二叉树算法,而且每个节点都保存了该主键所对应行的数据,假设插…

    2023-03-08
    140

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注