2 susan1992 susan1992 于 2013.12.27 11:18 提问

MySQL 删除重复数据(两个字段)

表full中userID和movieID两个字段确定一条唯一的数据。
现在表中有少量重复数据和大量非重复数据。
重复数据中,preference列和timestamp列不为空的这些,需要保留;preference列和timestamp列为空的这些需要删除,应该怎么办?
初学者,希望答案详细:) 感激不尽
+------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| userID | int(11) | NO | | 0 | |
| movieID | int(11) | NO | | 0 | |
| preference | int(11) | YES | | NULL | |
| timestamp | int(11) | YES | | NULL | |
+------------+---------+------+-----+---------+-------+

2个回答

zmb924
zmb924   2013.12.27 13:47

先建一个表,用distinct查询不重复的数据放到新建的表里面,然后把原表数据清空,再把刚才新表的数据插到原表里
然后把数据导入到新表中:
INSERT INTO table2 SELECT distinct * FROM table1;
你试一下,看可以不?

susan1992
susan1992 谢谢回答,可能我没太说清楚。重复的两条数据不是完全相同的,movieID和userID相同,preference和timestamp一个是有数值的,另一个是NULL。我想保留有数值的这条,删除空的这条。但是不重复的大量数据中,它们的preference和timestamp也为NULL,同样需要保留。
4 年多之前 回复
lzl001
lzl001   2013.12.27 17:35

step 1: 复制table为table_copy
step 2: delete from table where UserID is NULL and MovieID is NULL and (UserID,MovieID) in (select t1.UserID,t1.MovieID from table_copy as t1,table_copy as t2 where t1.UserID = t2.UserID and t1.MovieID = t2.MovieID and not (t1.preference = t2.preference and t1.timestamp = t2.timestamp));

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!