重复记录(duplicate records)数据的相关操作
2014-07-11 11:26
447 查看
MySQL
中查找重复数据,删除重复数据
创建表和测试数据
/*
表结构 */
DROPTABLEIFEXISTS
`t1`;
CREATETABLEIFNOTEXISTS
`t1`(
`id` INT(1)NOTNULL
AUTO_INCREMENT,
`name` VARCHAR(20)NOTNULL,
`add`VARCHAR(20)NOTNULL,
PRIMARYKEY(`id`)
)Engine=InnoDB;
/*
插入测试数据 */
INSERTINTO
`t1`(`name`,`add`)VALUES
('abc',"123"),
('abc',"123"),
('abc',"321"),
('abc',"123"),
('xzy',"123"),
('xzy',"456"),
('xzy',"456"),
('xzy',"456"),
('xzy',"789"),
('xzy',"987"),
('xzy',"789"),
('ijk',"147"),
('ijk',"147"),
('ijk',"852"),
('opq',"852"),
('opq',"963"),
('opq',"741"),
('tpk',"741"),
('tpk',"963"),
('tpk',"963"),
('wer',"546"),
('wer',"546"),
('once',"546");
运行完上面的SQL,可以用
SELECT*FROM
`t1` 测试一下。
查找所有重复的数据
重复数据只显示其中一条:
效果如下:
id name add
------ ------ --------
1 abc 123
12 ijk 147
15 opq 852
18 tpk 741
21 wer 546
5 xzy 123
查找所有重复数据(重复数据重复显示 */
查询结果如下:
id name add
------ ------ --------
1 abc 123
2 abc 123
4 abc 123
6 xzy 456
7 xzy 456
8 xzy 456
9 xzy 789
11 xzy 789
12 ijk 147
13 ijk 147
19 tpk 963
20 tpk 963
21 wer 546
22 wer 546
显示所有数据(重复数据只显示一次)
下面的SQL简单快速有效,但不能保证重复字段的records显示哪一个record。
删除重复数据:
2. 然后执行语句:INSERT IGNORE INTO new_table SELECT * FROM old_table
对于本题就是:
1. 新建t1_copy,然后将name,add设置为主键
2.执行INSERT IGNORE INTO t1_copy SELECT * FROM t1 ORDER BY t1.`id`, OK
注意:
这里表中有一个主键id,若没有主键id,数据量大时会很慢,这样可以人为插入一个主键id。如
参考文章:
http://www.cnblogs.com/consatan/archive/2010/12/17/1909087.html
转载请注明出处:http://blog.csdn.net/acema/article/details/37692867
中查找重复数据,删除重复数据
/*
表结构 */
DROPTABLEIFEXISTS
`t1`;
CREATETABLEIFNOTEXISTS
`t1`(
`id` INT(1)NOTNULL
AUTO_INCREMENT,
`name` VARCHAR(20)NOTNULL,
`add`VARCHAR(20)NOTNULL,
PRIMARYKEY(`id`)
)Engine=InnoDB;
/*
插入测试数据 */
INSERTINTO
`t1`(`name`,`add`)VALUES
('abc',"123"),
('abc',"123"),
('abc',"321"),
('abc',"123"),
('xzy',"123"),
('xzy',"456"),
('xzy',"456"),
('xzy',"456"),
('xzy',"789"),
('xzy',"987"),
('xzy',"789"),
('ijk',"147"),
('ijk',"147"),
('ijk',"852"),
('opq',"852"),
('opq',"963"),
('opq',"741"),
('tpk',"741"),
('tpk',"963"),
('tpk',"963"),
('wer',"546"),
('wer',"546"),
('once',"546");
运行完上面的SQL,可以用
SELECT*FROM
`t1` 测试一下。
重复数据只显示其中一条:
/* 查找所有重复数据,重复数据只显示一次 */ SELECT * FROM `t1` GROUP BY `name` HAVING COUNT(1) > 1 #HAVING COUNT(1) = 1 #这条语句表示显示其中不重复的数据
效果如下:
id name add
------ ------ --------
1 abc 123
12 ijk 147
15 opq 852
18 tpk 741
21 wer 546
5 xzy 123
重复数据每条都显示
/*查找所有重复数据(重复数据重复显示 */
SELECT t1.* FROM t1, (SELECT t1.name, t1.add FROM t1 GROUP BY `name`, `add` HAVING COUNT(1) > 1) AS `t2` WHERE `t1`.`name` = `t2`.`name` AND `t1`.`add` = `t2`.`add`
查询结果如下:
id name add
------ ------ --------
1 abc 123
2 abc 123
4 abc 123
6 xzy 456
7 xzy 456
8 xzy 456
9 xzy 789
11 xzy 789
12 ijk 147
13 ijk 147
19 tpk 963
20 tpk 963
21 wer 546
22 wer 546
下面的SQL简单快速有效,但不能保证重复字段的records显示哪一个record。
SELECT * FROM t1 GROUP BY NAME #having count(*) > 1 #加上这条语句,重复字段的records只显示一次
1 最简单快速 的方法:
1. 新建一个一样表结构的表,经重复内容字段设置为unique2. 然后执行语句:INSERT IGNORE INTO new_table SELECT * FROM old_table
对于本题就是:
1. 新建t1_copy,然后将name,add设置为主键
2.执行INSERT IGNORE INTO t1_copy SELECT * FROM t1 ORDER BY t1.`id`, OK
2 笨方法UNION(数据量大时很慢):
SELECT * FROM t1 GROUP BY `name`, `add` HAVING COUNT(1) > 1 UNION SELECT * FROM t1 GROUP BY `name`, `add` HAVING COUNT(1) = 1 ORDER BY id
注意:
这里表中有一个主键id,若没有主键id,数据量大时会很慢,这样可以人为插入一个主键id。如
参考文章:
http://www.cnblogs.com/consatan/archive/2010/12/17/1909087.html
转载请注明出处:http://blog.csdn.net/acema/article/details/37692867
相关文章推荐
- 重复记录(duplicate records)相关运营数据
- ORACLE 重复记录相关操作
- asp.net DataTable相关操作集锦(筛选,取前N条数据,去重复行,获取指定列数据等)
- DataTable相关操作,筛选,取前N条数据,去重复行,获取指定列数据
- 重复记录的sql相关操作
- DataTable相关操作,筛选,取前N条数据,去重复行,获取指定列数据
- DataTable相关操作,筛选,取前N条数据,去重复行,获取指定列数据
- asp.net DataTable相关操作集锦(筛选,取前N条数据,去重复行,获取指定列数据等)
- _mysql_exceptions.IntegrityError: (1062, "Duplicate entry, Python操作MySQL数据库,插入重复数据
- mysql-数据(记录)相关操作(增删改查)及权限管理
- _mysql_exceptions.IntegrityError: (1062, "Duplicate entry, Python操作MySQL数据库,插入重复数据
- DataTable相关操作,筛选,取前N条数据,去重复行,获取指定列数据
- DataTable相关操作,筛选,取前N条数据,去重复行,获取指定列数据
- SQL删除、查找重复数据记录等操作
- SQL删除数据表中重复记录中的一条
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- TSQL查询给定记录的相关数据
- SQL 删除重复记录,同时统计重复记录某一列的数据 以及 SET XACT_ABORT
- 删除重复的数据记录
- 如果把一个图层ILayer数据COPY到三维Scenecontrol控件中(进行相关操作)