注册账号 登录
用友之家-用友软件论坛 返回首页

stonys的个人空间 https://www.oyonyou.com/?96 [收藏] [复制] [分享] [RSS] 空间描述空间描述空间描述空间描述

日志

mysql查询重复字段

热度 6已有 2151 次阅读2010-2-26 18:05 |个人分类:网络维护

数据库中有个大表,需要查找其中的名字有重复的记录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值,就必须使用子查询了,于是使用下面的语句。

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`;

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

2

路过
2

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (4 人)

发表评论 评论 (2 个评论)

回复 490743255aa 2011-8-20 12:33
好贴
回复 Mark3389 2023-6-29 17:53
SQL语句

facelist

您需要登录后才可以评论 登录 | 注册账号

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-4-29 16:01 , Processed in 0.039874 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部