SQL查询,三个表

时间:2011-06-02 08:35:40

标签: mysql 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部分​​

SELECT name FROM movies JOIN . . . 

我从每个

的first_name和last_name值开始

3 个答案:

答案 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
相关问题