本文目录一览:
- 1、mysql怎么去除重复数据
- 2、Mysql去掉重复数据的做法:distinct , group by。以及数据库的拓展
- 3、mysql查询时如何去除重复数据
- 4、Mysql数据库中多条重复数据,如何只删除一条?
- 5、mysql怎么删除表中的重复的数据
- 6、mysql连表查询出现重复的数据怎么办
mysql怎么去除重复数据
MySQL 删除重复数据
有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。
本章节我们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据。
删除重复数据
如果你想删除数据表中的重复数据,你可以使用以下的SQL语句:
当然你也可以在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表中的重复记录。方法如下:
Mysql去掉重复数据的做法:distinct , group by。以及数据库的拓展
一张user表 中的name字段,里面有10个张三。我要只查询出一个张三。
SQL: select distinct name from user
如果还要查询出id
SQL: select distinct name,id from user
SQL :select name from user group by name
group by理解:表里的某一个字段(比如:name) 当出现相同的数据时,group by就将这2条数据合二为一。name就显示一条 数据了。 但是name达到合二为一了,这2条数据的其他数据怎么办呢? 这时候需要配合聚合函数的使用。
where条件:分组前的条件,配合任何关键字使用
Having 条件:分组后的条件 (事后条件) ,只配合group by使用。having条件通常使用聚合函数
SQL :select deptno,sum(sal) from emp group by deptno having sum(sal) 9000;
SQL: select deptno,count(*) from emp where sal 1000 group by deptno haing sum(sal) 8000
拓展:
聚合函数定义:聚合函数对一组值进行计算并返回单一的值。(以下都属于聚合函数)
count(*) : 不包括空值。返回对行数目的计数。计算出有多少行,多少条数据。
count() : 包含空值。返回对数目的计数。计算表里有多少行,相当于多少条数据。
sum() : 求和运算
max(); 最大值
min(): 最小值
avg(): 平均值
mysql查询时如何去除重复数据
MySQL 过滤重复数据
有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。
如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。
你也可以使用 GROUP BY 来读取数据表中不重复的数据:
Mysql数据库中多条重复数据,如何只删除一条?
这个需要分情况。
1,你的数据库表中有主键,且主键上面的数据为唯一值。也就是没有重复值。
那么你在删除的时候,将这个唯一值作为条件进行删除。
如:
delete
from
[表名]
where
id=1
2.所有的数据相同,那么你只能打开数据表,手工选定其中某一条,进行删除。
mysql怎么删除表中的重复的数据
通常情况下,一个我们在做一个产品的时候,一开始可能由于设计考虑不周或者程序写的不够严谨,某个字段上的值产生重复了,但是又必须去掉,这个时候就稍微麻烦了一点,直接加一个 UNIQUE KEY 肯定是不行了,因为会报错。
现在,我们来采用一种变通的办法,不过可能会丢失一些数据 :)
在这里,我们设定一个表,其结构如下:
mysql desc `user`;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | char(10) | NO | | | |
| extra | char(10) | NO | | | |
+-------+------------------+------+-----+---------+----------------+
原来表中的数据假定有以下几条:
mysql SELECT * FROM `user`;
+----+-------+--------+
| id | name | extra |
+----+-------+--------+
| 1 | user1 | user1 |
| 2 | user2 | user2 |
| 3 | user3 | user3 |
| 4 | user4 | user4 |
| 5 | user5 | user5 |
| 6 | user3 | user6 |
| 7 | user6 | user7 |
| 8 | user2 | user8 |
| 9 | USER2 | user9 |
| 10 | USER6 | user10 |
+----+-------+--------+
1、将原来的数据导出
mysqlSELECT * INTO OUTFILE '/tmp/user.txt' FROM `user`;
2、清空数据表
mysqlTRUNCATE TABLE `user`;
3、创建唯一索引,并且修改 `name` 字段的类型为 BINARY CHAR 区分大小写
mysql ALTER TABLE `user` MODIFY `name` CHAR(10) BINARY NOT NULL DEFAULT '';
mysql ALTER TABLE `user` ADD UNIQUE KEY ( `name` );
现在来看看新的表结构:
mysql desc user;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | char(10) | NO | UNI | | |
| extra | char(10) | NO | | | |
+-------+------------------+------+-----+---------+----------------+
4、把数据导回去,在这里,有两种选择:新的重复记录替换旧的记录,只保留最新的记录 或者是 新的记录略过,只保留最旧的记录
mysql LOAD DATA INFILE '/tmp/user.txt' REPLACE INTO TABLE `user`;
Query OK, 10 rows affected (0.00 sec)
Records: 8 Deleted: 2 Skipped: 0 Warnings: 0
mysql SELECT * FROM USER;
+----+-------+--------+
| id | name | extra |
+----+-------+--------+
| 1 | user1 | user1 |
| 8 | user2 | user8 |
| 6 | user3 | user6 |
| 4 | user4 | user4 |
| 5 | user5 | user5 |
| 7 | user6 | user7 |
| 9 | USER2 | user9 |
| 10 | USER6 | user10 |
+----+-------+--------+
上面是采用 REPLACE 的方式,可以看到,导入过程中删掉了两条数据,结果验证确实是 新的重复记录替换旧的记录,只保留最新的记录。
现在,来看看用 IGNORE 的方式:
mysql LOAD DATA INFILE '/tmp/user.txt' IGNORE INTO TABLE `user`;
Query OK, 6 rows affected (0.01 sec)
Records: 8 Deleted: 0 Skipped: 2 Warnings: 0
mysql SELECT * FROM USER;
+----+-------+--------+
| id | name | extra |
+----+-------+--------+
| 1 | user1 | user1 |
| 2 | user2 | user2 |
| 3 | user3 | user3 |
| 4 | user4 | user4 |
| 5 | user5 | user5 |
| 7 | user6 | user7 |
| 9 | USER2 | user9 |
| 10 | USER6 | user10 |
+----+-------+--------+
看到了吧,确实是 新的记录略过,只保留最旧的记录。
mysql连表查询出现重复的数据怎么办
重复来自关联 条件了。 如果你用 A left join B on A.t1=B.t2 在B表中t2 有多条,那么你的结果 就会 变成多条了
和你 用 form A,B where A.t1=B.t2 是一样的道理
如A t1 字段
1 2 3 4
B t2 字段
1 ,1,2,2,3
你如果全连接 A.t1=B.t2 就是 A.t1 只要和 B.t2 字段相等,满足这个条件的就连接了。
所以重复了就说明你的连接条件 下 有字段 不是唯一的值