我使用以下查询来查找重复记录并验证它是否正确运行。
SELECT MLS_LISTING_ID, STREET_NUMBER, STREET_NAME, UNIT_NUMBER, MLS_ID, SALE_PRICE, ZIP_CODE, TLN_REALTOR_ID, COUNT(mls_id)
FROM idx_FM_BO_NA
GROUP BY TLN_REALTOR_ID, STREET_NUMBER, STREET_NAME, UNIT_NUMBER, SALE_PRICE
HAVING COUNT(distinct MLS_ID) > 1;
如何更改此查询以删除重复项,以便只有一个记录实例?我不担心哪些记录被删除,但我需要其中一个留下来。
答案 0 :(得分:2)
我认为这个答案是正确的:
delete from table1 USING table1, table1 as vtable
WHERE table1.ID<vtable.ID AND table1.field_name=vtable.field_name
这一点与paulsm4的答案之间的唯一区别在于使用less-than而不是not-equals来比较id。这样,以后不会与之前的记录进行比较(这意味着将保留一个且仅保留一个相同的记录)。我用自己需要的数据测试了这个,并且它有效。
答案 1 :(得分:0)
这是一个简单的解决方案:
http://www.cyberciti.biz/faq/howto-removing-eliminating-duplicates-from-a-mysql-table/
delete from table1 USING table1, table1 as vtable
WHERE (NOT table1.ID=vtable.ID) AND (table1.field_name=vtable.field_name)
- 在这里告诉mysql有一个table1。
- 然后你告诉它你将使用table1和一个值为table1的虚拟表。
- 这会让mysql不能将记录与自身进行比较!
- 在此告诉它不应该有相同field_name的记录。
醇>
答案 2 :(得分:0)
以下MySQL命令将创建一个临时表和 用一个列名称(列)填充所有列GROUPED 具有重复的)并按主键升序排序。该 第二个命令从临时表创建一个真实的表。该 第三个命令删除正在使用的表,最后删除最后一个表 command将第二个临时表重命名为当前使用的当前表 表名。
这是一个非常快速的解决方案 以下是四个命令:
CREATE TEMPORARY TABLE videos_temp AS SELECT * FROM videos GROUP by
title ORDER BY videoid ASC;
CREATE TABLE videos_temp2 AS SELECT * FROM videos_temp;
DROP TABLE videos;
ALTER TABLE videos_temp2 RENAME videos;