SQL查询需求:获取指定Playlist关联的完整Track数据
解决方法
你可以用子查询搭配SELECT t.*来拿到完整的Track数据,不用手动列所有Track字段,也不会带出其他表的字段:
SELECT t.* FROM Track t WHERE t.id IN ( SELECT trackID FROM PlaylistItem WHERE playlistID IN (1, 4) -- 这里传入你要查询的播放列表ID数组 ) GROUP BY t.id; -- 去重,避免同一首歌因为多次出现在播放列表里重复返回
为啥这么写
- 内层子查询就是你之前用来获取trackID的逻辑,负责筛出目标播放列表里的所有歌曲ID
- 外层查询用Track表的id关联子查询结果,
t.*会直接返回Track表的全部字段,不管以后字段怎么加、怎么改都不用改这句SQL - 加
GROUP BY t.id是因为同一首歌可能被加到多个播放项里,这样能保证每首歌只返回一次
执行后得到的结果
| id | title |
|---|---|
| 2 | Foo |
| 22 | Bar |
| 222 | Byy |
另外还有一种用JOIN的写法,效果一样:
SELECT DISTINCT t.* FROM Track t INNER JOIN PlaylistItem pi ON t.id = pi.trackID WHERE pi.playlistID IN (1, 4);
这里用DISTINCT来实现去重,和上面的写法选哪种都行。
内容的提问来源于stack exchange,提问作者Woww
相关产品推荐
相关产品推荐

