MySQL大表中重复字段的高效率查询方法

MySQL大表重复字段应该如何查询到呢?这是很多人都遇到的问题,下面就教您一个MySQL大表重复字段的查询方法,供您参考。
数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较。
如果仅仅是查找数据库中name不重复的字段,很容易

代码如下:
SELECT min(`id`),`name`
FROM `table`
GROUP BY `name`;

但是这样并不能得到说有重复字段的id值。(只得到了最小的一个id值)
查询哪些字段是重复的也容易
代码如下:
SELECT `name`,count(`name`) as count
FROM `table`
GROUP BY `name` HAVING count(`name`) >1
ORDER BY count DESC;

但是要一次查询到重复字段的id值,就必须使用子查询了,于是使用下面的语句来实现MySQL大表重复字段查询。
代码如下:
SELECT `id`,`name`
FROM `table`
WHERE `name` in (
SELECT `name`
FROM `table`
GROUP BY `name` HAVING count(`name`) >1
);

但是这条语句在mysql中效率太差,感觉mysql并没有为子查询生成临时表。
于是使用先建立临时表
代码如下:
create table `tmptable` as (
SELECT `name`
FROM `table`
GROUP BY `name` HAVING count(`name`) >1
);

然后使用多表连接查询
代码如下:
SELECT a.`id`, a.`name`
FROM `table` a, `tmptable` t
WHERE a.`name` = t.`name`;

结果这次结果很快就出来了。

用 distinct去重复

代码如下:
SELECT distinct a.`id`, a.`name`
FROM `table` a, `tmptable` t
WHERE a.`name` = t.`name`;

时间: 2024-11-13 02:16:22

MySQL大表中重复字段的高效率查询方法的相关文章

MySQL大表中重复字段的高效率查询方法_Mysql

MySQL大表重复字段应该如何查询到呢?这是很多人都遇到的问题,下面就教您一个MySQL大表重复字段的查询方法,供您参考. 数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较.如果仅仅是查找数据库中name不重复的字段,很容易 复制代码 代码如下: SELECT min(`id`),`name` FROM `table` GROUP BY `name`;   但是这样并不能得到说有重复字段的id值.(只得到了最小的一个id值)查询哪些字段是重复的也容易  复制代码 代码如下: SEL

MySQL大表中重复字段的查询效率方法

MySQL大表重复字段应该如何查询到呢?这是很多人都遇到的问题,下面就教您一个MySQL大表重复字段的查询方法,供您参考. 数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较. 如果仅仅是查找数据库中name不重复的字段,很容易 SELECT min(`id`),`name`     FROM `table`     GROUP BY `name`;    但是这样并不能得到说有重复字段的id值.(只得到了最小的一个id值) 查询哪些字段是重复的也容易 SELECT `name`,c

select-ibatis查出mysql数据库表中某字段为null的数据???怎么写动态sql

问题描述 ibatis查出mysql数据库表中某字段为null的数据???怎么写动态sql 例如 select * from test where name is null 这条sql 中 IS NULL 报错,不知道ibatis里该怎么写??? 解决方案 我竟然不知道你想表达什么 解决方案二: 这条sql报错,不知道怎么改进??? 解决方案三: select * from table where content is "" 解决方案四: 在数据库中null 也是个值 解决方案五: 我

MySQL 删除表中重复记录

版本是:5.0.22-community-nt. 1. 为表folder新建一个临时表folder_tmp create table folder_tmp as select * from folder group by serverIp, userId, name, path; 这里根据serverIp, userId, name, path分组之后,表folder_tmp中留下的是主键id靠前的数据 2. 删除原来的表 drop table folder 3. 重命名表 alter tabl

oracle 11g在大表中添加字段及默认值--加速

今天遇到这个问题了.简单的增加语句,默认SQLPLUS执行,却会超时. 要增加客户端的TIMEOUT时间才可以解决.(感觉超过两三分钟,默认超时30秒) 另外, 也可以用两步操作(1,增加字段,2,修改默认值),或是加以NOT NULL参数. 参考URL: http://blog.csdn.net/mikean/article/details/24872955 http://blog.csdn.net/weiwangsisoftstone/article/details/7674916 类似语句

mysql中向表中某字段追加字符串的方法_Mysql

Update `表名` SET title = CONCAT(title,'MV') where articleid=3487 and title not like '%v'  

mysql-Mysql向表中某个字段添加有规律字符串怎么写SQL语句?例如(1P,2P,3P)

问题描述 Mysql向表中某个字段添加有规律字符串怎么写SQL语句?例如(1P,2P,3P) 如图所示 表 b 有三个字段aid,partname,partid,我希望partid字段可以根据partname字段的值添加有规律的字符串. 例如 partname字段值为PART 1则partid字段添加值 1P,partname字段值为PART 2则partid字段添加值 2P, partname的值除了上述格式还有TV 01,TV 02,特征都是字符串有(无)空格加数字, 还有种就是数字夹在字符

确定Oracle数据库表中重复记录的方法

作为一个Oracle数据库开发者或者DBA,在实际工作中经常会遇到这样的问题:试图对库表中的某一列或几列创建唯一索引时,系统提示ORA-01452:不能创建唯一索引,发现重复记录. 下面我们以表code_ref为例来讨论这个问题及其解决办法. ERROR位于第1行: ORA-01452: 无法 CREATE UNIQUE INDEX:找到重复的关键字 Oracle系统提示不能对表code_ref创建一个唯一索引,因为系统发现表中存在重复的记录.我们必须首先找到表中的重复记录并删除该记录,才可以创

求大神帮忙 MySQL 去掉数据库中重复的数据,保留一条

问题描述 求大神帮忙 MySQL 去掉数据库中重复的数据,保留一条 解决方案 mysql中删除两条重复的数据,只保留一条mysql 删除重复数据只保留一条mysql删除重复数据只保留一条 解决方案二: 菜鸟的答复: ** 删除前先备份一下,万一错了,我不管 ** /* 假设你的表叫table_car */ DELETE FROM table_car WHERE car_id NOT IN (SELECT MIN(car_id) FROM table_car GROUP BY car_line_i