-- 查找表中多余的重复记录(多个字段)
SELECT * FROM tb_news1 a
WHERE (a.Id,a.TITLE,a.SOURCE,a.DATE) IN
(SELECT a.Id,a.TITLE,a.SOURCE,a.DATE FROM tb_news1 a GROUP BY a.Id,a.TITLE,a.SOURCE,a.DATE HAVING COUNT(1) > 1)
-- 删除表中多余的重复记录(多个字段),只留有rowid最小的记录
DELETE FROM tb_news1 a WHERE
(a.Id,a.TITLE,a.SOURCE,a.DATE) IN
(SELECT a.Id,a.TITLE,a.SOURCE,a.DATE FROM tb_news1 a GROUP BY a.Id,a.TITLE,a.SOURCE,a.DATE HAVING COUNT(1) > 1)
AND a.Id NOT IN (SELECT MIN(a.Id) FROM tb_news1 a GROUP BY a.Id,a.TITLE,a.SOURCE,a.DATE HAVING COUNT(1)>1 )
-- ================ test data ======================
DROP TABLE IF EXISTS tb_news1;
CREATE TABLE tb_news1 (
Id INT(11) NOT NULL ,
TITLE VARCHAR(255) DEFAULT NULL COMMENT '标题',
CONTENT VARCHAR(1000) DEFAULT NULL COMMENT '内容',
SOURCE VARCHAR(255) DEFAULT NULL COMMENT '新闻来源',
DATE DATETIME DEFAULT NULL COMMENT '新闻日期'
-- ,
-- PRIMARY KEY (Id)
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO tb_news1 VALUES (1,'谷歌发布Android 4.0.3内核源代码','Google','iteye','2011-12-20');
INSERT INTO tb_news VALUES (2,'谷歌发布Android 4.0.3内核源代码','Google','iteye','2011-12-20');
INSERT INTO tb_news VALUES (3,'Ubuntu 将从用户电脑移除 JDK','Ubuntu ','baidu','2011-12-20');
INSERT INTO tb_news VALUES (4,'谷歌发布Android 4.0.3内核源代码','Google','iteye','2011-12-20');
INSERT INTO tb_news VALUES (5,'Ubuntu 将从用户电脑移除 JDK','Ubuntu ','baidu','2011-12-20');
INSERT INTO tb_news1 VALUES (6,'Ubuntu 将从用户电脑移除 JDK','Ubuntu ','baidu','2011-12-20');
--
INSERT INTO tb_news1 VALUES (1,'谷歌发布Android 4.0.3内核源代码','Google','iteye','2011-12-20');
INSERT INTO tb_news1 VALUES (6,'Ubuntu 将从用户电脑移除 JDK','Ubuntu ','baidu','2011-12-20');
SELECT * FROM tb_news1;
-- =================================
-- ---
1。用rowid方法
据据oracle带的rowid属性,进行判断,是否存在重复,语句如下:
查数据:
SELECT * FROM table1 a WHERE rowid !=(SELECT MAX(rowid)
FROM table1 b WHERE a.name1=b.name1 AND a.name2=b.name2……)
删数据:
DELETE FROM table1 a WHERE rowid !=(SELECT MAX(rowid)
FROM table1 b WHERE a.name1=b.name1 AND a.name2=b.name2……)
2.group BY方法
查数据:
SELECT COUNT(num), MAX(NAME) FROM student --列出重复的记录数,并列出他的NAME属性
GROUP BY num
HAVING COUNT(num) >1 --按num分组后找出表中num列重复,即出现次数大于一次
删数据:
DELETE FROM student
GROUP BY num
HAVING COUNT(num) >1
这样的话就把所有重复的都删除了。
分享到:
相关推荐
本文将详细介绍三种在MySQL中实现去重查询的方法:使用DISTINCT、GROUP BY以及使用开窗函数ROW_NUMBER()或其类比方法。 ### 一、使用DISTINCT DISTINCT关键字是SQL中最常见的去重方式,它会返回所有不同的记录。...
在MySQL中,去重是常见的数据处理需求,主要目的是消除数据表中重复的记录。本文将详细介绍两种在MySQL中实现去重的方法,并提供相应的实例代码。 ### 方法一:使用DISTINCT关键字 `DISTINCT` 是MySQL中用于去除...
总的来说,MySQL去重的方法可以根据实际需求选择合适的方法,从简单的`DISTINCT`查询到复杂的多字段去重,甚至在数据完全相同的极端情况下,通过创建临时主键来实现去重。在操作时,务必谨慎,避免误删重要数据,...
在MySQL数据库中,进行去重操作是常见的需求,特别是在处理大量数据时,高效地完成这一任务至关重要。本问题中,我们需要从源表`t_source`中提取出不重复的`created_time`和`item_name`组合,并将这50万条唯一的记录...
本文实例讲述了mysql优化小技巧之去除重复项实现方法。分享给大家供大家参考,具体如下: 说到这个去重,脑仁不禁得一疼,尤其是出具量比较大的时候。毕竟咱不是专业的DB,所以嘞,只能自己弄一下适合自己去重方法了...
一 distinct 含义:distinct用来查询不重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段 用法注意: 1.distinct【查询字段】,...
总结起来,处理MySQL中的重复记录问题,可以利用`GROUP BY`、`HAVING`和子查询来高效地实现“去重留一”。对于开发者来说,掌握这种高级SQL技巧能够提高数据库操作的效率,并降低程序的复杂性。在日常工作中,不断...
在MySQL数据库中,`DISTINCT` 和 `GROUP BY` 是两个非常重要的SQL关键字,它们都可以用来处理数据的去重问题,但在实际应用中,两者的使用场景和效果有所差异。 首先,`DISTINCT` 关键字的主要作用是去除查询结果中...
MySQL 数据库优化是提高百万条数据查询速度的关键技术,尤其对于大数据量的表,优化查询策略至关重要。以下是一些核心的 MySQL 优化建议: 1. **建立索引**:索引能够极大地加速查询过程,特别是在 WHERE 和 ORDER ...
sql 查出一张表中重复的所有记录数据 1.表中有id和name 两个字段,查询出name重复的所有数据 select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1) ...
在实际应用中,还可以使用其他方法进行去重,例如`DISTINCT`关键字、`UNION`操作符或`JOIN`等。对于百万级别的大数据,可能需要考虑更复杂的数据清洗策略,如分块处理、并行处理等,以提高性能和效率。 总之,MySQL...
在MySQL中,`DISTINCT`语句用于查询结果集中的唯一不同的值,它是一个非常有用的SQL关键字,尤其在处理去重需求时。当查询的数据可能存在重复记录时,使用`DISTINCT`可以帮助我们过滤掉这些重复项,只保留唯一的数据...
主要涉及:JOIN 、JOIN 更新、GROUP BY HAVING 数据查重/去重 1 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN(MySQL 不支持)、CROSS JOIN 这是在网上找到的非常好的一篇博文,图解 join 语句: CODING HORROR-A ...
本文主要给大家介绍了关于scrapy爬到的数据保存到mysql(防止重复)的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 1.环境建立 1.使用xmapp安装php, mysql ,phpmyadmin 2....