UPDATE tracks SET album_id=target.keep_id FROM ( SELECT tracks.id, del_albums.id AS del_id, keep_albums.id AS keep_id FROM tracks INNER JOIN (SELECT albums.* FROM albums INNER JOIN (SELECT title, artist_id, count(*) AS col_count from albums group by title, artist_id) AS cnt ON cnt.title = albums.title AND cnt.artist_id = albums.artist_id INNER JOIN (SELECT title, artist_id, min(rowid) AS min_row_id from albums group by title, artist_id) AS min_row ON min_row.title = albums.title AND min_row.artist_id = albums.artist_id WHERE cnt.col_count > 1 AND albums.rowid != min_row.min_row_id) del_albums ON del_albums.id = tracks.album_id INNER JOIN (SELECT albums.* FROM albums INNER JOIN (SELECT title, artist_id, count(*) AS col_count from albums group by title, artist_id) AS cnt ON cnt.title = albums.title AND cnt.artist_id = albums.artist_id INNER JOIN (SELECT title, artist_id, min(rowid) AS min_row_id from albums group by title, artist_id) AS min_row ON min_row.title = albums.title AND min_row.artist_id = albums.artist_id WHERE cnt.col_count > 1 AND albums.rowid = min_row.min_row_id) keep_albums ON keep_albums.title = del_albums.title AND keep_albums.artist_id=del_albums.artist_id) AS target WHERE tracks.id = target.id; DELETE FROM albums WHERE id in (SELECT albums.id FROM albums INNER JOIN (SELECT title, artist_id, count(*) AS col_count from albums group by title, artist_id) AS cnt ON cnt.title = albums.title AND cnt.artist_id = albums.artist_id INNER JOIN (SELECT title, artist_id, min(rowid) AS min_row_id from albums group by title, artist_id) AS min_row ON min_row.title = albums.title AND min_row.artist_id = albums.artist_id WHERE cnt.col_count > 1 AND albums.rowid != min_row.min_row_id);