<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Erick &#187; 重复记录</title>
	<atom:link href="http://blog.xiongchuan.org/tag/dupication-records/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.xiongchuan.org</link>
	<description>Even a great life is only a life until you make it.</description>
	<lastBuildDate>Thu, 10 Mar 2011 14:44:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
	
<!-- Start Of Script Generated By WP-PostViews Plus -->
<script type='text/javascript' src='http://blog.xiongchuan.org/wp-includes/js/jquery/jquery.js?ver=1.4.4'></script>
<script type="text/javascript">
/* <![CDATA[ */
/* ]]> */
</script>
<!-- End Of Script Generated By WP-PostViews Plus -->
	<item>
		<title>mysql 查找重复记录 删除重复记录</title>
		<link>http://blog.xiongchuan.org/mysql-find-and-delete-duplicate-records.html</link>
		<comments>http://blog.xiongchuan.org/mysql-find-and-delete-duplicate-records.html#comments</comments>
		<pubDate>Tue, 17 Nov 2009 09:14:40 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[重复记录]]></category>

		<guid isPermaLink="false">http://www.pigblog.net/?p=414</guid>
		<description><![CDATA[几天没更新了，比较懒。 在公司，我重新设计了SP系统，并完全废掉了原系统，我来做新的，现在基本可以投入使用，为了兼容原来的数据，要把旧数据迁移过来， 中途就会有一些重复记录，需要消灭。 所谓重复，那肯定是记录里的某些字段有一样的，根据这个来判断了。 一，查找重复 表person id int 10 name varchar 20 这样的一个表，根据name来判断重复，我们可以把记录都查找出来 select *,count(*) as total from person group by name order by total desc group by name 按name进行分组，name一样的记录只显示一条，count(*) as total ，用这个可以看到name一样的记录有多少条,为了直观,order by total desc 把重复记录的排在前面，这样就可以找出这个表里面的重复记录了。 PS：这里是把所有的数据显示出来了，那些total=1的是没有重复的，如果只想要重复的在group by name 后面加having 子句 如下 select *,count(*) as total from person group by name having total&#62;1 order [...]]]></description>
			<content:encoded><![CDATA[<p>几天没更新了，比较懒。<br />
在公司，我重新设计了SP系统，并完全废掉了原系统，我来做新的，现在基本可以投入使用，为了兼容原来的数据，要把旧数据迁移过来，<br />
中途就会有一些重复记录，需要消灭。<br />
所谓重复，那肯定是记录里的某些字段有一样的，根据这个来判断了。<br />
一，<span style="color: #ff0000;">查找重复</span><br />
表person<br />
id       int          10<br />
name varchar 20<br />
这样的一个表，根据name来判断重复，我们可以把记录都查找出来<br />
select *,count(*) as total from person group by name order by total desc<br />
group by name 按name进行分组，name一样的记录只显示一条，count(*) as total ，用这个可以看到name一样的记录有多少条,为了直观,order by total desc 把重复记录的排在前面，这样就可以找出这个表里面的重复记录了。<br />
PS：这里是把所有的数据显示出来了，那些total=1的是没有重复的，如果只想要重复的在group by name 后面加having 子句 如下<br />
<span style="color: #ff0000;">select *,count(*) as total from person group by name having total&gt;1 order by total desc</span><br />
这样就只有重复的记录了  当然你的表 肯定 不会这么简单,在group by 前面可以添加where子句</p>
<p>二，<span style="color: #ff0000;">删除重复</span><br />
1.这个是从网上随便找的(改了下，适用上面的那个表)，像我这样的门外汉，还看不明白，来分析下<br />
delete from person where name  in (select  name  from person  group  by  name   having  count(*) &gt; 1)<br />
and id not in (select min(id) from  person  group by name  having count(*)&gt;1)<br />
name  in (select  name  from person  group  by  name   having  count(*) &gt; 1) 这一句找出name有重复的所有记录<br />
id not in (select min(id) from  person  group by name  having count(*)&gt;1)这一句找出id不等于这些重复记录的最小id<br />
用and连接起来就是，删除重复记录，且保留id最小的那一条，要不然全删除了<br />
2.还看了个，不用连接来做的，思路是用连接选出除了最小id可是最大id的所有记录，然后删除，具体代码不想找了。<br />
以上的方法虽然说可以实现，但是代码量太大了。。。。。。<br />
3.我用的是下面这种，简单直观<br />
<span style="color: #ff0000;">delete a from person a left join person b on a.name=b.name where a.id&gt;b.id</span><br />
对person做自身连接，找出name一样的记录,附加条件是a.id&gt;b.id这样就把重复记录里面id最小的值保留下来了</p>
<p><span style="color: #ff0000;">后记：留给新手，老手一边玩去！</span><br />
<span style="color: #0000ff;">非常感谢网友 chopper 的发问，在上面第三种方法删除重复语句的时候，少写了一个字母，否则有语法错误</span></p>
<h4  class="entry-title">Related Posts</h4><ul class="related_post"><li><a href="http://blog.xiongchuan.org/cant-find-messagefile-resolve.html" title="MySQL Can&#8217;t find messagefile,解决方法">MySQL Can&#8217;t find messagefile,解决方法</a></li><li><a href="http://blog.xiongchuan.org/centos-5-3-apache2-mysql5-php-5-3-server.html" title="CentOS 5.3搭建Apache2.2.4+Mysql5.1.4+PHP5.3服务器">CentOS 5.3搭建Apache2.2.4+Mysql5.1.4+PHP5.3服务器</a></li><li><a href="http://blog.xiongchuan.org/mysql-backup.html" title="MySQL备份">MySQL备份</a></li><li><a href="http://blog.xiongchuan.org/mysql-error-1045-28000-access-denied-for-user-rootlocalhost.html" title="Mysql ERROR 1045 (28000): Access denied for user &#8216;root&#8217;@'localhost&#8217;">Mysql ERROR 1045 (28000): Access denied for user &#8216;root&#8217;@'localhost&#8217;</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.xiongchuan.org/mysql-find-and-delete-duplicate-records.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

