我有三个表movies
、categories
和movie_categories
。
表:电影#title---------1电影-1 2电影-2 3电视-1
表:类别#标题--------1恐怖2喜剧3(电视)4科幻
表:Movie_Categories#movie_id category_id---------------1 1 1 2 2 4 3 3 3 4 3 4
我正在尝试提取只有movie_categories.category_id:3&4
的记录
SELECT `movies`.`title` FROM `movie_categories`
INNER JOIN `movies` ON `movies`.`id` = `movie_categories`.`movie_id`
WHERE `category_id` = 3
AND `category_id` = 4
如果我使用或
而不是和
,那么它将显示具有所选类别之一的所有记录。
我做错了什么?
3
和4
不能在单行中有效。因此,您的where
子句过滤掉所有行。
您需要不同行中的值,因此需要聚合--然后在聚合之后进行筛选:
SELECT mc.movid_id
FROM movie_categories mc
WHERE mc.category_id IN (3, 4)
GROUP BY mc.movie_id
HAVING COUNT(*) = 2; -- both rows are present
请注意,您的查询还引用了title
,但它不在movie_categories
数据库中。您需要join
(当然,还有其他方法,但这是最常见的)来从movie_id
获取标题。我会让你继续努力的。