从“MySQL”中删除重复项并保留单个记录

从“MySQL”中删除重复项并保留单个记录,mysql,Mysql,我正在使用以下查询查找重复记录,并已验证它是否正确运行 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 HAV

我正在使用以下查询查找重复记录,并已验证它是否正确运行

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; 

如何更改此查询以删除重复项,从而只有一个记录实例?我不担心哪些记录会被删除,但我需要保留其中一条记录。

这里有一个简单的解决方案:

  • 这里您告诉mysql有一个表1
  • 然后告诉它您将使用table1和一个具有table1值的虚拟表
  • 这将使mysql无法将记录与自身进行比较
  • 在这里,您告诉它不应该有具有相同字段名的记录

  • 我认为这个答案是正确的:

    delete from table1 USING table1, table1 as vtable 
    WHERE table1.ID<vtable.ID AND table1.field_name=vtable.field_name
    
    使用表1从表1中删除,表1作为vtable
    表1.ID在哪里
    以下MySQL命令将创建一个临时表和
    使用按一个列名分组的所有列(列
    ,并按主键升序排列。这个
    第二个命令从临时表创建一个实际表。这个
    第三个命令删除正在使用的表,最后是最后一个
    命令将第二个临时表重命名为当前使用的临时表
    表名

    这是一个非常快速的解决方案。
    以下是四个命令:

  • CREATE temp TABLE videos\u temp AS SELECT*FROM videos GROUP by
    videoid ASC的所有权顺序
  • CREATE TABLE videos\u temp2作为SELECT*FROM videos\u temp
  • DROP TABLE视频
  • altertablevideos\u temp2重命名视频

  • 因此,在我的示例中,ID将是TLN_REALTOR_ID,我将继续添加字段_name,并让其他字段模拟GROUP BY?这会删除所有重复项还是只留下一个实例?我相信这不会保留一条记录,而是删除所有有重复项的行(包括它们的重复项)。我猜这样做的原因是第一行与第二行进行了比较(第二行显然没有相同的ID),但是第二行与第一行进行了比较。。所以这两个都被删除了。
    delete from table1 USING table1, table1 as vtable 
    WHERE table1.ID<vtable.ID AND table1.field_name=vtable.field_name