Select 条属于所有指定类别的记录

Select records that belong to all specified categories

一个视频可以有多个类别。我想要 select 属于两个类别的视频。

该查询返回的结果,视频仅属于条件中的一个类别

SELECT Videos.id, Videos.title
FROM videos Videos 
INNER JOIN categories_videos CategoriesVideos
    ON Videos.id = CategoriesVideos.video_id 
INNER JOIN categories Categories
    ON Categories.id = CategoriesVideos.category_id AND Categories.id IN (21, 35)
LIMIT 25;

我尝试对类别进行多次连接 table 但它没有改变任何东西。

感谢您的帮助。

您可以尝试以下方法(可以扩展以测试 n 个类别):

SELECT *
FROM videos
WHERE id IN (
    SELECT video_id
    FROM categories_videos
    WHERE category_id IN (21, 35)
    GROUP BY video_id
    HAVING COUNT(*) = 2
)

当你这样写你的连接时

AND Categories.id IN(21, 35)

您要求的所有视频至少有一个 Categories.id 与之关联。

如果只想要两者兼具的,可以试试这个

SELECT Videos.id, Videos.title FROM videos Videos 
INNER JOIN categories_videos CategoriesVideos 
    ON Videos.id = CategoriesVideos.video_id 
INNER JOIN categories Categories 
    ON Categories.id = CategoriesVideos.category_id
AND Categories.id = 21 AND Categories.id =35
LIMIT 25;