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;
一个视频可以有多个类别。我想要 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;