从“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;
如何更改此查询以删除重复项,从而只有一个记录实例?我不担心哪些记录会被删除,但我需要保留其中一条记录。这里有一个简单的解决方案:
我认为这个答案是正确的:
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