精彩推荐

mysql删除重复记录

614人阅读  0人回复   查看全部 | 阅读模式 | 复制链接   

1

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2015-3-16 11:23:11
分享到:

有些时候我们在插入数据的时候可能是循环的问题,就会插入很多重复的数据,但是我们一条一条删除就会很麻烦,所以我们来个高效快捷的删除方式

首先:创建一个表,不要加自增

CREATE TABLE IF NOT EXISTS `caiji_ym_list` (  `newid` int(8) NOT NULL COMMENT '新闻的id',  `pinurl` text NOT NULL COMMENT '拼接之后的url',  KEY `newid` (`newid`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;


插入重复的测试数据

INSERT INTO `caiji_ym_list` VALUES (285003, '&callback=fn1');

INSERT INTO `caiji_ym_list` VALUES (285003, '&callback=fn1');


INSERT INTO `caiji_ym_list` VALUES (285004, '&callback=fn2');

INSERT INTO `caiji_ym_list` VALUES (285004, '&callback=fn2');


INSERT INTO `caiji_ym_list` VALUES (285005, '&callback=fn3');

INSERT INTO `caiji_ym_list` VALUES (285005, '&callback=fn3');


INSERT INTO `caiji_ym_list` VALUES (285006, '&callback=fn4');

INSERT INTO `caiji_ym_list` VALUES (285006, '&callback=fn4');


查询显示全部的重复的数据

SELECT a.newid,a.pinurlFROM `caiji_ym_list` as a,(  SELECT `newid`,`pinurl`  FROM `caiji_ym_list`  GROUP BY `newid`,`pinurl`  HAVING COUNT(1) > 1) AS `b`WHERE a.`newid` = b.`newid`  AND a.`pinurl` = b.`pinurl` ORDER BY a.newid;


需要表上加一个自增的键值

/* 为表添加自增长的id字段 */ALTER TABLE `caiji_ym_list` ADD `id` INT(8) NOT NULL AUTO_INCREMENT, ADD INDEX `id`(`id`);


删除重复的数据

DELETE FROM `caiji_ym_list`USING `caiji_ym_list`,(  SELECT DISTINCT MIN(`id`) AS `id`,`newid`,`pinurl`  FROM `caiji_ym_list`  GROUP BY `newid`,`pinurl`  HAVING COUNT(1) > 1) AS `b`WHERE `caiji_ym_list`.`newid` = `b`.`newid`  AND `caiji_ym_list`.`pinurl` = `b`.`pinurl`  AND `caiji_ym_list`.`id` <> `b`.`id`;


查看相应数据结果

[SQL]DELETE FROM `caiji_ym_list`USING `caiji_ym_list`,(  SELECT DISTINCT MIN(`id`) AS `id`,`newid`,`pinurl`  FROM `caiji_ym_list`  GROUP BY `newid`,`pinurl`  HAVING COUNT(1) > 1) AS `b`WHERE `caiji_ym_list`.`newid` = `b`.`newid`  AND `caiji_ym_list`.`pinurl` = `b`.`pinurl`  AND `caiji_ym_list`.`id` <> `b`.`id`;受影响的行: 3

回复

使用道具 举报

快速回复 返回顶部 返回列表