簡體   English   中英

刪除mySQL表中的重復項

[英]Delete duplicates in mySQL table

我正在嘗試編寫我的第一個mySQL查詢。 如果它們具有相同的商品編號字段,則需要刪除它們。 我寫了這個查詢:

    SELECT
    article_number, COUNT(*)
FROM
    article_numbers
GROUP BY
    article_number
HAVING 
    COUNT(*) > 1

它顯示了所有重復的行。 但是,如何刪除每個重復項中除了1之外的所有內容?

謝謝

編輯:

我試過這個查詢:

delete article_numbers from article_numbers inner join 
    (select  article_number
     from article_numbers 
     group by article_number
     having count(1) > 1) as duplicates
   on (duplicates.article_number = article_numbers.article_number)

但這給了我這個錯誤:

無法刪除或更新父行:外鍵約束失敗( api products ,CONSTRAINT products_article_number_id_foreign FOREIGN KEY( article_number_id )參考article_numbersid ))

編輯2:

我暫時禁用了外鍵,現在刪除查詢起作用了。 但是,如何修改不刪除重復行之一?

使用CROSS JOIN

詢問

delete t1
from article_numbers t1,
article_numbers t2
where t1.id > t2.id 
and t1.article_number = t2.article_number;

小提琴演示

我使用一個相當簡單的查詢來刪除重復項:

;WITH DEDUPE AS (
SELECT ROW_NUMBER() OVER(
    PARTITION BY article_number
        ORDER BY (SELECT 1)) AS RN
FROM article_numbers)
DELETE FROM DEDUPE
WHERE RN != 1
Delete c
from (select *,rank() over(order by article_number) as r  from article_numbers )c
where c.r!=1

如果存在相同的article_number但具有更高的ID,則刪除一行:

delete from article_numbers t1
where exists (select 1 from article_numbers t2
              where t2.article_number = t1.article_number
                and t2.id > t1.id)

核心ANSI SQL,因此我想它可與MySQL和SQL Server一起使用。

我認為這會有所幫助:

    WITH tblTemp as
    (
    SELECT ROW_NUMBER() Over(PARTITION BY Name,Department ORDER BY Name)
       As RowNumber,* FROM <table_name>
    )
    DELETE FROM tblTemp where RowNumber >1

我修改了查詢,並認為現在可以使用:

SET FOREIGN_KEY_CHECKS=0;
delete article_numbers from article_numbers inner join 
    (select  min(id) minid, article_number
     from article_numbers 
     group by article_number
     having count(1) > 1) as duplicates
   on (duplicates.article_number = article_numbers.article_number and duplicates.minid <> article_numbers.id)

但這似乎很復雜。 我將檢查@Ullas方法,以查看它是否也有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM