首页 > 解决方案 > 具有多个条件的 SQL WHERE 语句

问题描述

我有一个电影、演职员表、人物和角色表(如下)我想找到既是演员又是导演的人的名字。

电影(表)

id int
title

学分(表)

id int
movie_id int
person_id int
role_id int

人(表)

id int
name

角色(表)

id int
role    (Actor, Director)

这就是我所做的:

SELECT p.name, r.role, m.role_id
FROM mtm_credits m
JOIN people p ON p.id = m.person_id
JOIN roles r ON r.id = m.role_id
WHERE role = 'Director' AND role = 'Actor';

但是,我得到 0 个结果。任何建议表示赞赏。

标签: mysqlsqljoinwhere-clausehaving-clause

解决方案


问题是结果表中没有单行的“角色”既是“导演”又是“演员”,因为“角色”只能是一个值。

首先考虑一下您的表在加入后的样子是很有用的。在这种情况下,您有:

credits.id, credits.movie_id, credits.person_id, credits.role_id, person.id, person.name, role.id, role.name

现在一个既是导演又是演员的人将在此表中有两行,如下所示:

| credits.id | credits.movie_id | credits.person_id | credits.role_id | person.id | person.name | role.id | role.name |
| 111 | 222 | 333 | 444 | 555 | 333 | N. Cage | 555 | Actor |
| 111 | 222 | 333 | 444 | 555 | 333 | N. Cage | 555 | Director |

正如其他人所说,您需要执行聚合以便一行可以具有多个角色值,或者您可以获取结果并在外部进行过滤


推荐阅读