所以,让我们一样,我试图找到两部电影中的演员(为了一定程度的分离页面)。我有这样的数据库(这只是一些组成的数据):
演员
id first_name last_name gender
17 brad pitt m
2 kevin bacon m
影
id name year
20 benjamin button 2008
角色
a_id m_id role
17 20 Mr. Benjamin Button
所以我想要回复两位演员所在的电影的名字。我有两位演员的名字和姓氏。
我在使用它时遇到了很多麻烦。具体来说,我遇到麻烦的是SELECT部分
SELECT name FROM movies JOIN . . .
我从每个
的first_name和last_name值开始答案 0 :(得分:4)
你必须加入两次:
SELECT m.name movie_name
FROM movies m join roles r1 on
r1.m_id = m.id join actors a1 on
r1.a_id = a1.id join roles r2 on
r2.m_id = m.id join actors a2 on
r2.a_id = a2.id
WHERE
a1.first_name = 'brad' and a1.last_name = 'pitt' and
a2.first_name = 'kevin' and a2.last_name = 'bacon'
显示每部电影的所有演员组合:
SELECT m.name movie_name, a1.id actor1, a2.id actor2
FROM movies m join roles r1 on
r1.m_id = m.id join actors a1 on
r1.a_id = a1.id join roles r2 on
r2.m_id = m.id join actors a2 on
r2.a_id = a2.id
WHERE
a1.id < a2.id
<
确保每个组合仅报告一次。
答案 1 :(得分:1)
select m.name,group_concat(concat_ws(' ',a.first_name,a.last_name) order by a.last_name) as actors
from actors as a
inner join roles as r on a.id = r.a_id
inner join movies as m on m.id = r.m_id
where r.a_id in (2,17)
group by r.m_id
having count(r.a_id) = 2
order by m.name
答案 2 :(得分:0)
声明@FirstActorID int, @SecondActorID int;
选择m。[name] 从 电影 内联接[roles] r1在r1.m_id = m.id和r1.a_id = @FirstActorID r2.m_id = m.id和r2.a_id = @SecondActorID
的内连接[角色] r2