我一直坚持根据类型和语言获取电影列表。
这是我的数据库结构:
电影表 ----------------------- 身份证 |标题| ---------------------- 1 |美国广播公司 2 |PQR 3 |跨国公司
类别表 ----------------------- 身份证 |卡托里 |价值 ---------------------- 1 |语言 |印地语 2 |语言 |恩迪利什 3 |流派 |戏剧 4 |流派 |行动 5 |流派 |惊悚管理
表 ----------------------- id|catgory_id|movie_id ---------------------- 1 | 1 | 1 2 | 3 | 1 3 | 4 | 1 4 | 2 | 2 5 | 4 | 2
这就是我想做的,我想要印地语和动作类型的电影。
以下是我的查询:
SELECT *
FROM manage
WHERE category_id='1' AND category_id='4'
GROUP BY movie_id
我期待印地语电影与动作类型的结果,但它返回空结果。
但是当我在查询中使用OR
运算符时,它会返回结果,但电影也有语言英语,但预期是语言印地语和流派动作。
我哪里出错了?
下面是一个使用聚合的解决方案:
SELECT m.id, m.title
FROM movie m
INNER JOIN manage a ON a.movie_id = m.id
INNER JOIN category c ON a.category_id = c.id
GROUP BY m.id, m.title
HAVING
MAX(c.category = 'language' AND c.value = 'Hindi') = 1
AND MAX(c.category = 'genre' AND c.value = 'Action') = 1
这个关于 DB 摆弄示例数据的演示返回:
| id | title |
| --- | ----- |
| 1 | ABC |