我已经从spotify下载了曲目信息,但许多歌曲都有多个版本,我想尝试整合。例如,在美国,蕾哈娜的《脑中的爱》有6个不同的记录。在本例中,我可以简单地比较曲目名称和艺术家id,并确定它们都(大致)是同一首歌。然而,当一个曲目有几个艺术家,它会变得(我认为)有点困难。
我有三个与本期相关的表格:tracks,它包含了我要分析的一些有趣的数据,每个曲目的一行,艺术家,它包含了每个艺术家的一行,track\u artists,它包含了每个曲目艺术家对的一行,track\u artists\u id自动递增,我会有一个或多个曲目行(取决于发行数量),rihanna有一个艺术家行,drake有一个艺术家行,然后对于曲目中的每一行,track\u artists有两行:因此下面的查询会给出以下结果:
select ta.track_id, ta.artist_id, a.name
from track_artists ta inner join artists a on ta.artist_id=a.artist_id
inner join tracks t on t.track_id=ta.track_id
where t.name='Work';
+------------------------+------------------------+-------------+
| track_id | artist_id | name |
+------------------------+------------------------+-------------+
| 0ghpAAdn5OmxvI7ul5DR2B | 5pKCCKE2ajJHZ9KAiaK11H | Rihanna |
| 0ghpAAdn5OmxvI7ul5DR2B | 3TVXtAsR1Inumwj472S9r4 | Drake |
| 32lmL4vQAAotg6MrJnhlQZ | 5pKCCKE2ajJHZ9KAiaK11H | Rihanna |
| 32lmL4vQAAotg6MrJnhlQZ | 3TVXtAsR1Inumwj472S9r4 | Drake |
| 4aRD0bzvsBD0MAB4LcsRSM | 5pKCCKE2ajJHZ9KAiaK11H | Rihanna |
| 4aRD0bzvsBD0MAB4LcsRSM | 3TVXtAsR1Inumwj472S9r4 | Drake |
| 4m6D70k5xMmCDCB19u7Bi0 | 5pKCCKE2ajJHZ9KAiaK11H | Rihanna |
| 4m6D70k5xMmCDCB19u7Bi0 | 3TVXtAsR1Inumwj472S9r4 | Drake |
+------------------------+------------------------+-------------+
对我来说很明显,这些都是同一首歌,但是把它们分组的最佳方法是什么呢?我的解决方案是:
select t.track_id,t.name,a1.artist_id first_artist,a2.artist_id second_artist
from track_artists a1 inner join tracks t on t.track_id=a1.track_id
inner join track_artists a2 on t.track_id=a2.track_id
where t.name='Work' and
a1.artist_id = (select artist_id from track_artists where track_id = t.track_id limit 1) and
a2.artist_id = (select artist_id from track_artists where track_id = t.track_id limit 1,1);
+------------------------+------+------------------------+------------------------+
| track_id | name | first_artist | second_artist |
+------------------------+------+------------------------+------------------------+
| 0ghpAAdn5OmxvI7ul5DR2B | Work | 5pKCCKE2ajJHZ9KAiaK11H | 3TVXtAsR1Inumwj472S9r4 |
| 32lmL4vQAAotg6MrJnhlQZ | Work | 5pKCCKE2ajJHZ9KAiaK11H | 3TVXtAsR1Inumwj472S9r4 |
| 4aRD0bzvsBD0MAB4LcsRSM | Work | 5pKCCKE2ajJHZ9KAiaK11H | 3TVXtAsR1Inumwj472S9r4 |
| 4m6D70k5xMmCDCB19u7Bi0 | Work | 5pKCCKE2ajJHZ9KAiaK11H | 3TVXtAsR1Inumwj472S9r4 |
+------------------------+------+------------------------+------------------------+
然后只需添加一个由t.name,first\u artist,second\u artist组成的组。
这真的是最好的方法吗?特别是考虑到有些歌曲有超过10位艺术家合作?我的数据库建得不好吗?
暂无答案!
目前还没有任何答案,快来回答吧!