Find duplicates in the same table in MySQL

后端 未结 13 1876
感动是毒
感动是毒 2020-12-10 02:03

I have a table with two columns - artist, release_id

What query can I run to show duplicate records?

e.g. my table is

ArtistX : 45677
ArtistY         


        
相关标签:
13条回答
  • 2020-12-10 02:10
    SELECT id,artist,COUNT(*) FROM myTable
    GROUP BY artist, release_id HAVING COUNT(*) > 1
    
    0 讨论(0)
  • 2020-12-10 02:13

    You can also try something like this:

    SELECT W.artist, W.release_id FROM table W, table W1 
    WHERE W.artist= W1.artist AND W.release_id = W1.release_id;
    
    0 讨论(0)
  • 2020-12-10 02:21

    This method might not be great for you, but if you ever want to get rid of duplicates and do this while making sure they are duplicates indeed you can try this:

    1. duplicate your table1 into table2, for example like this:

      CREATE TABLE table2 AS SELECT * FROM table1;
      
    2. add a new column to table1, for example, name it to count

    3. run a query (this assumes release_id should an unique column):

    UPDATE table1 AS t1 SET t1.kount = (SELECT COUNT(*) FROM table2 AS t2 WHERE t1.release_id = t2.release_id)
    
    1. drop table table2

    2. use table1.kount to find your duplicates and remove them or something. Preferably in PHP/Python/Perl. This way you can, for example, make sure they are indeed duplicates and just have the same release_id. The same release_id might be given by accident and titles, years of publication, etc. might be different. So just put your code here to filter the duplicates (pseudocode):

    foreach (sql(SELECT * FROM table1 WHERE kount>1)) do
        //do something
    
    0 讨论(0)
  • 2020-12-10 02:22
    select * from table where artist IN (select artist from table group by artist having count(ID)>1) and release_id IN (select release_id from table group by release_id having count(release_id)>1);
    

    Will Fetch:

    ArtistX : 45677
    ArtistX : 45677
    ArtistY : 378798
    ArtistY : 378798
    
    0 讨论(0)
  • 2020-12-10 02:24

    If you have more unique column in one row, you can use this:

    DELETE FROM table WHERE id in(
        SELECT x.id 
        FROM ( 
            SELECT *,count(id) cc FROM table group by col1,col2,col3... 
        ) x
        WHERE x.cc>1
    )
    
    0 讨论(0)
  • 2020-12-10 02:26

    you can try something like this

    select artist, count(*) from mytable group by artist having count(*) > 1;
    

    wich would output

    artist   count(*)
    45677    2
    378798   2
    
    0 讨论(0)
提交回复
热议问题