2011-06-02 156 views
1

因此,让我们一样,我试图找到两个电影在一起的演员(为了一定程度的分离页面)。我有数据库本身(这只是一些由数据):SQL查询,三个表

演员

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 name FROM movies JOIN . . . 

我开始与FIRST_NAME和LAST_NAME值为每个

回答

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 

<确保每个组合国家只报告一次。

0

declare @FirstActorID int, @SecondActorID int;

选择米。[名称] 从 电影中号 内加入[角色]在R1 r1.m_id = m.id和r1.a_id = @FirstActorID 内加入[角色] R2上r2.m_id =米.id和r2.a_id = @SecondActorID

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