MySQL消除重复行方法步骤


本文摘自PHP中文网,作者小云云,侵删。

本文主要介绍了MySQL 消除重复行的一些方法,需要的朋友可以参考下,希望能帮助到大家。

sql语句


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

/*

MySQL 消除重复行的一些方法

---Chu Minfei

---2010-08-12 22:49:44.660

--引用转载请注明出处:http://blog.csdn.NET/feixianxxx

*/

----------------全部字段重复------------------------

 --1使用表替换来删除重复项

 create table test_1(id int,value int);

 insert test_1 select 1,2 union all select 1,2 union all select 2,3;

 --建立一个和源表结构一样的空的临时表

 create table tmp like test_1;

 --向临时表插入不重复的记录

 insert tmp select distinct * from test_1;

 --删除原表

 drop table test_1;

 --更改临时表名为目标表

 rename table tmp to test_1;

 --显示

 mysql> select * from test_1;

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

| id  | value |

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

|  1 |   2 |

|  2 |   3 |

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

 --2.添加auto_increment属性列(这个方法只能用于MyISAM或者BDB引擎的表)

 create table test_1(id int,value int) engine=MyISAM;

 insert test_1 select 1,2 union all select 1,2 union all select 2,3;

 alter table test_1 add id2 int not null auto_increment,

 add primary key(id,value,id2);

 select * from test_1;

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

| id | value | id2 |

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

| 1 |   2 |  1 |

| 1 |   2 |  2 |

| 2 |   3 |  1 |

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

  delete from test_1 where id2<>1;

  alter table test_1 drop id2;

  select * from test_1;

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

| id | value |

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

| 1 |   2 |

| 2 |   3 |

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

-------------------部分字段重复---------------------

--1.加索引的方式

 create table test_2(id int,value int);

 insert test_2 select 1,2 union all select 1,3 union all select 2,3;

 Alter IGNORE table test_2 add primary key(id);

 select * from test_2;

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

| id | value |

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

| 1 |   2 |

| 2 |   3 |

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

 我们可以看到 1 3 这条记录消失了

 我们这里也可以使用Unique约束 因为有可能列中有NULL值,但是这里NULL就可以多个了..

 --2.联合表删除

 create table test_2(id int,value int);

 insert test_2 select 1,2 union all select 1,3 union all select 2,3;

 delete A from test_2 a join (select MAX(value) as v ,ID from test_2 group by id) b

 on a.id=b.id and a.value<>b.v;

 select * from test_2;

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

| id  | value |

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

|  1 |   3 |

|  2 |   3 |

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

--3.使用Increment_auto也可以就是上面全部字段去重的第二个方法

--4.容易错误的方法

--有些朋友可能会想到子查询的方法,我们来试验一下

 create table test_2(id int,value int);

 insert test_2 select 1,2 union all select 1,3 union all select 2,3;

 delete a from test_2 a where exists(select * from test_2 where a.id=id and a.value<value);

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

  

 目前,您不能从一个表中删除,同时又在子查询中从同一个表中选择。

  

  

 ------------------删除特定重复行--------------

 --主要通过order by +limit 或者直接limit

 create table test_3(id int,value int);

 insert test_3 select 1,2 union all select 1,3 union all select 1,4 union all select 2,3;

 --这是要保留ID=1 value最小的那个记录,删除其他id为的记录

 delete from test_3 where id=1 order by value desc limit 2;

 select * from test_3;

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

| id  | value |

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

|  1 |   2 |

|  2 |   3 |

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

 如果你只想删除任意的记录 保留一条 就可以去掉order by

相关推荐:

php处理文本文档重复行

关于消除重复行的详细介绍

MySQL如何消除重复行的方法分析

以上就是MySQL消除重复行方法步骤的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

mysql如何操作数据表

数据库的qps和tps的意义和计算方法

linux如何线上安装mysql

mysql 8.0.20 window10免安装版配置及navicat管理教程图文详解

mysql数据库的字符编码问题

mysql创建并打开数据库的命令是什么

mysql中的建表语句是什么

怎么查看电脑是否有mysql

mysql中char表示什么意思

mysql怎么删除触发器

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...