2011-06-02 153 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