私は2つのテーブルを持っています:
+---------+-----------------+----------+----------+----------+---------+
| TrackId | URI | ArtistID | Title | AlbumID | BitRate |
+---------+-----------------+----------+----------+----------+---------+
| 1 | /home/music/... | 234 | atune | 8958223 | 192 |
| 2 | /music/uri1/... | 427 | goodsong | 222 | 192 |
| 3 | /music/uri2/... | 427 | goodsong | 222 | 128 |
| 4 | /music/uri3/... | 427 | goodsong | 222 | 160 |
| 5 | /home/music/... | 427 | goodsong | 333 | 128 |
| 6 | /home/music/... | 522 | another | 3458859 | 128 |
+---------+-----------------+----------+----------+----------+---------+
と
+----------+------------+
| AlbumID | AlbumTitle |
+----------+------------+
| 8958223 | titleA |
| 222 | titleB |
| 333 | titleC |
| 3458859 | titleD |
+----------+------------+
簡単に言えば、私が欲しいのはこれです:
+---------+-----------------+----------+----------+----------+------------+---------+
| TrackId | URI | ArtistID | Title | AlbumId | AlbumTitle | BitRate |
+---------+-----------------+----------+----------+----------+------------+---------+
| 3 | /music/uri2/... | 427 | goodsong | 222 | titleB | 128 |
| 4 | /music/uri3/... | 427 | goodsong | 222 | titleB | 160 |
+---------+-----------------+----------+----------+----------+------------+---------+
これは、次のような重複を削除する試みです。
- 同じタイトル
- 同じアーティストID
- 別のトラックID
- 非最高ビットレートの重複
- アルバムテーブルの同じアルバム名
重複するビットレートが最も高いエントリを返さない間
私はここで非常によく似た質問をしました:単一の行から重複を選択しますか?
その解決策は次のとおりです。
SELECT c1.*
FROM CoreTracks c1
,(SELECT Title, ArtistID, MAX(FileSize) AS maxFileSize, MAX(BitRate) maxBitRate
FROM CoreTracks
GROUP BY Title, ArtistID) c2
WHERE c1.Title = c2.Title
AND c1.ArtistID = c2.ArtistID
AND (c1.FileSize != c2.maxFileSize AND c1.BitRate != c2.maxBitRate)
...しかし、今回は別のテーブルを扱うことに頭を悩ませているようには見えません。