mysql - 使用 SQL 查找所有轨道均由同一 Composer 创作的播放列表?

标签 mysql sql

我有三个表:

  1. 播放列表(PlaylistId、名称)
  2. PlaylistTrack(PlaylistId, TrackId)
  3. 轨道(轨道 ID、名称、 Composer )

我必须找到所有轨道都由同一 Composer 创作的所有播放列表 ID?

我尝试了这个查询,但答案不正确:

SELECT P.PlaylistId
FROM PlatList P , PlaylistTrack PT
WHERE P.PlaylistId = PT.PlaylistID AND PT.TrackId = (SELECT T1.TrackId
                                                     FROM Track T1, Track T2
                                                     WHERE T1.Composer = T2.Composer)
GROUP BY P.PlaylistId

最佳答案

只需使用 HAVING 子句过滤每个包含多个 Composer 的播放列表即可。

SELECT
p.PlaylistId
FROM
Playlist p
JOIN PlaylistTrack pt ON p.PlaylistId = pt.PlaylistId
JOIN Track t ON pt.TrackId = t.TrackId
GROUP BY p.PlaylistId
HAVING COUNT(DISTINCT t.Composer) = 1;

并使用 JOIN 子句来连接表,而不是 WHERE 子句。

关于mysql - 使用 SQL 查找所有轨道均由同一 Composer 创作的播放列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32985954/

相关文章:

mysql - SQL 查询仅在第二部分中进行并集和随机排序

javascript - Node.JS MySQL 等待查询结果

mysql - 无法检索插入到 mysql 中的相同 double 值

sql - SQLite:从两个相关的列中获取模态/模式

sql - SQL UPDATE 语句所需的优化建议。使用了大约 500 万个记录表

mysql - SQL 搜索名称并按最佳匹配排序

php - 使用 PHP 从时间戳中减去 6 小时

MYSQL - 从两个表的 INNER JOIN 获取数据

php - 如何搜索部分/屏蔽字符串?

sql - 特定用户购买的所有产品