`
fantaxy025025
  • 浏览: 1309172 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

MySQL_用一条SQL语句删除重复记录

 
阅读更多

 

MySQL 一条SQL语句删除重复记录

 

不正确的写法一。

delete from t_user where id in(select max(id) as id from t_user group by username ); 

但是mysql不支持这个写法(别的db是不是支持,没有测试),报错:

ERROR 1093 (HY000): You can't specify target table 't_user' for update in FROM clause

原因大概是删除的同时,不能查询自己,跟程序的foreach循环过程中不能删除类似

 

不正确的写法二。

delete t_user

from t_user as t_user, (select id from t_user group by username having count(*) > 1) as t2

where t_user.id=t2.id; 

这个的原理是删除重复的,但这个算法只对重复个数是2的管用,一旦重复数是3等,就不能惯用了。

 

 

正确的方法一。

--这个算法的原理是:group但不会count,这样在temp_table中的就是最终要留下来的结果,把其他的删除就ok了

--另外,这里利用了temp table,避免了上面foreach不能删除的问题

delete t_user

from t_user  

where id not in (

    select id from (select id from t_user group by username) as temp_table

);

 

正确的方法二。

算法同上,只是可以不用group,用distinct

 

例子:

--表

 

drop table t_user; 

create table t_user( 

id        int(5) not null auto_increment, 

username varchar(10), 

age       int(3), 

primary key(id) 

); 

 

--插入

insert into t_user(username,age) values('aaa',20); 

insert into t_user(username,age) values('aaa',20);

 

insert into t_user(username,age) values('bbb',20); 

insert into t_user(username,age) values('bbb',20); 

insert into t_user(username,age) values('bbb',20); 

 

insert into t_user(username,age) values('ccc',20); 

insert into t_user(username,age) values('ccc',20); 

insert into t_user(username,age) values('ccc',20); 

insert into t_user(username,age) values('ccc',20); 

insert into t_user(username,age) values('e',10); 

insert into t_user(username,age) values('f',5); 


--查看
mysql> select * from t_user;
+----+----------+------+
| id | username | age  |
+----+----------+------+
| 55 | aaa      |   20 |
| 56 | aaa      |   20 |
| 57 | bbb      |   20 |
| 58 | bbb      |   20 |
| 59 | bbb      |   20 |
| 60 | ccc      |   20 |
| 61 | ccc      |   20 |
| 62 | ccc      |   20 |
| 63 | ccc      |   20 |
| 64 | e        |   10 |
| 65 | f        |    5 |
+----+----------+------+
11 rows in set (0.00 sec)

 

--删除

 

delete t_user

from t_user  

where id not in (

    select id from (select id from t_user group by username) as temp_table

);

--再查看

 

mysql> select * from t_user;

+----+----------+------+

| id | username | age  |

+----+----------+------+

| 55 | aaa      |   20 |

| 57 | bbb      |   20 |

| 60 | ccc      |   20 |

| 64 | e        |   10 |

| 65 | f        |    5 |

+----+----------+------+

5 rows in set (0.00 sec)


 

 

--------END EOF 完毕-------

O

K

 

O

K

O

K


 

分享到:
评论

相关推荐

    SQL.rar_labview mysql_mysql labview_sql

    标题“SQL.rar_labview mysql_mysql labview_sql”和描述“在labview中实现数据库MySQL调用的节点函数”指向一个关于使用LabVIEW(Laboratory Virtual Instrument Engineering Workbench)与MySQL数据库进行交互的...

    Mysql常用SQL语句

    MySQL常用SQL语句 MySQL是一种关系型数据库管理系统,使用SQL(Structured Query Language)语言来管理和操作数据库。下面是MySQL中一些常用的SQL语句: 创建、删除和基本查询 * 显示数据库:`show databases;` *...

    【MySQL数据库】一条SQL语句为什么执行这么慢?

    【MySQL数据库】一条SQL语句执行慢的问题是一个复杂的议题,涉及到多个方面,包括数据库的内部机制、事务处理、索引优化以及SQL语句的设计。下面将深入解析导致SQL执行变慢的主要因素。 **一、执行偶尔变慢** 1. *...

    mysql_sql语句

    在IT领域,尤其是在数据库管理与开发中,MySQL作为一款广泛使用的开源关系型数据库管理系统,其SQL语句的应用显得尤为重要。本文将围绕“mysql_sql语句”这一主题,深入解析从数据库创建到数据管理的各项关键操作,...

    mysql_test_c__by_wy.rar_MYSQL_mysql api_mysql c++

    更新和删除操作类似,只需构建对应的SQL语句并调用`mysql_query()`。例如,更新一条记录: ```c++ const char* update_data_sql = "UPDATE students SET age = 30 WHERE name = 'John Doe'"; if (mysql_query(conn,...

    Delphi adoquery处理多条SQL语句

    在这个例子中,我们首先通过 `BeginTrans` 开始一个事务,然后依次执行多条 SQL 插入语句,最后使用 `CommitTrans` 提交事务。如果在执行过程中出现异常,则使用 `RollbackTrans` 回滚事务。 ##### 3. 更新批处理 ...

    sql_CONNECT.zip_MYSQL_mysql python_python sql_python 数据库_python数

    4. **执行SQL语句**:连接建立后,我们可以创建游标对象,通过游标执行SQL语句,例如查询、插入、更新和删除操作。比如执行一个简单的查询: ```python cursor = conn.cursor() cursor.execute("SELECT * FROM ...

    MySQL SQL语句练习题及答案

    MySQL SQL语句练习题及答案 本资源提供了 MySQL SQL 语句的练习题及答案,涵盖了创建表、插入数据、删除数据、更新数据、查询数据等多方面的知识点。 一、创建表 在 MySQL 中,创建表使用 CREATE TABLE 语句。...

    MySQL根据某一个或者多个字段查找重复数据的sql语句

    sql 查出一张表中重复的所有记录数据 1.表中有id和name 两个字段,查询出name重复的所有数据 select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1) 2、...

    mysql sql语句示例1

    根据提供的文件信息,我们可以归纳出一系列关于MySQL的基本操作与概念,包括如何创建表格、定义不同类型的字段、设置主键、外键以及各种约束等。接下来将详细解释这些知识点。 ### 创建表格 #### 示例1:创建学生...

    Python语句实现Mysql多条插入语句

    本代码,用python语句,实现了一次插入多条sql语句。希望能对大家带来帮助。

    介绍六个有用的MySQL的SQL语句

    MySQL 是一种广泛使用的关系数据库管理系统,SQL 语句是其核心组成部分。今天,我们将介绍六个有用的 MySQL SQL 语句,帮助您更好地使用 MySQL 数据库。 1. 计算年数 计算年数是日常生活中常见的问题,例如,根据...

    Mysql查询最近一条记录的sql语句(优化篇)

    在MySQL数据库中,查询最近一条记录通常涉及到时间戳或者某个排序字段。本文主要探讨了三种不同的SQL语句来实现这一目标,从效率低下的方法到更优化的解决方案,特别是针对大量数据的情况。 首先,最简单但效率最低...

    Page_SQL(Sqlserver_mysql_oracle_postgre).rar_PAGE_SQL_page

    在项目中,分页查询通常结合`JOIN`、`WHERE`等其他SQL语句一起使用,以满足更复杂的需求。例如,可能需要根据用户条件过滤数据后再分页,或者在多个表之间联合查询时进行分页。`www.pudn.com.txt`可能是某个网站上...

    mysql 一条语句删除多表数据

    "mysql 一条语句删除多表" 的主题就是关于如何通过单个SQL语句来删除关联的多个表的数据,从而节省数据库连接资源和提高执行效率。下面将详细解释这一技术及其背后的原理。 首先,我们要理解的是SQL语言中的“JOIN...

    Sql语句 查询本周记录\本月记录\本季度记录\本年记录

    这条语句使用 `DATEPART` 函数将日期转换为季度,然后比较当前日期的季度减去一个季度以获取上季度的记录。 查询本年记录 MySQL 中,您可以使用以下语句查询本年记录: ```sql SELECT * FROM ht_invoice_...

    mysql.rar_MYSQL_mysql select c

    在C语言中,使用MySQL接口执行SQL语句通常涉及以下步骤: 1. 初始化:创建一个MYSQL结构体实例,初始化连接参数(如主机名、用户名、密码和数据库名)。 2. 连接:使用`mysql_real_connect()`函数建立到MySQL服务器...

    mysql.zip_MYSQL_mysql vc_mysql-vc_vc mysql

    例如,插入一条新用户记录: ```cpp const char* insert_data_sql = "INSERT INTO users (name) VALUES ('John Doe')"; if (mysql_query(conn, insert_data_sql)) { cerr << "Error: " << mysql_error(conn) ; } ...

    MySQL删除重复记录

    与`REPLACE`选项不同,`IGNORE`选项在遇到重复记录时不会删除旧记录,而是直接跳过这条记录,继续处理下一条记录。这适用于那些不希望因为重复记录而中断数据导入场景。 使用`IGNORE`选项的命令如下: ```sql LOAD...

    MySQL 查询重复内容只显示一条

    标题“MySQL 查询重复内容只显示一条”涉及到的是在MySQL数据库中如何处理重复数据的问题。在数据分析或数据存储过程中,有时我们需要找出并处理重复的记录,只保留一条作为代表。这通常可以通过聚合函数和分组来...

Global site tag (gtag.js) - Google Analytics