所以,我正在创建一个音乐数据库。 我使用三个表(文件,类别,categories_assignments)。
我希望能够选择多个类别的文件(例如,流行和摇滚的歌曲)
我已经制作了or
差异(包含在下面以供参考)
SELECT DISTINCT `files`.`filename` FROM `files`
INNER JOIN `categories_assignments`
ON `files`.`id` = `categories_assignments`.`fileid`
INNER JOIN `categories`
ON `categories_assignments`.`catid` = `categories`.`id`
WHERE `categories`.`name` = 'rock' OR `categories`.`name`='pop';
答案 0 :(得分:1)
这是一个“set-within-sets”问题 - 您正在寻找具有一组类别的歌曲。我想使用group by
和having
来解决此问题:
SELECT f.filename
FROM files f JOIN
categories_assignments ca
ON f.id = ca.fileid JOIN
categories c
ON ca.catid = c.id
WHERE c.name IN ('rock', 'pop')
GROUP BY f.filename
HAVING COUNT(*) = 2;
注意:
IN
而不是多次OR
比较。SELECT DISTINCT
几乎从不有用。首先学习使用GROUP BY
。答案 1 :(得分:0)
按文件分组,仅采用具有两种类别的组
SELECT f.filename
FROM files f
INNER JOIN categories_assignments ca ON f.id = ca.fileid
INNER JOIN categories c ON ca.catid` = c.id
WHERE c.name in ('rock', 'pop')
GROUP BY f.filename
HAVING count(c.name) = 2