2015-10-07 22 views
0

嗨,我有以下表格和列。在電影數據庫mysql中完全外連接

movie: ID, title 

person: ID, name 

involved: personID, movieID 

我需要回答這樣的問題:

「哪個電影要麼約翰·特拉沃爾塔和烏瑪·瑟曼,但不能同時出演?」

我不知道如何做到這一點,而不創建新的表,所以我做了2個新表。並試圖做完整的外連接,在那裏你沒有得到相交的結果。我發現你不能在mysql中進行完整的外連接,但必須進行左連接,並與右連接進行結合。我嘗試過,但沒有得到我想要的結果。我一直在卡住一段時間。任何人都可以將我指向正確的方向嗎?

這是我到目前爲止。

DROP TABLE IF EXISTS Umatable; 
DROP TABLE IF EXISTS Johntable; 

CREATE TABLE Umatable(title VARCHAR(500)); 
CREATE TABLE Johntable(title VARCHAR(500)); 

INSERT INTO Umatable 
SELECT m.title 
FROM movie m, person p, involved i 
WHERE p.name = "Uma Thurman" 
AND p.id = i.personid 
AND m.id = i.movieiD; 

INSERT INTO Johntable 
SELECT m.title 
FROM movie m, person p, involved i 
WHERE p.name = "John Travolta" 
AND p.id = i.personid 
AND m.id = i.movieiD; 

SELECT * 
FROM Umatable 
LEFT JOIN Johntable ON Umatable.title = Johntable.title 
WHERE Johntable.title IS NULL OR Umatable.title IS NULL 
UNION 
SELECT * 
FROM Umatable 
RIGHT JOIN Johntable ON Umatable.title = Johntable.title 
WHERE Johntable.title IS NULL OR Umatable.title IS NULL 

回答

0

相關子查詢內部的count(*)將工作:

select * 
    from movie m 
where 1 = (select count(*) 
       from involved i 
       join person p 
       on p.ID = i.personID 
       and p.name IN ('John Travolta', 'Uma Thurman') 
      where i.movieID = m.ID) 

SQLFiddle Demo

2

我會做到這一點使用聚合和having

select i.movieId 
from involved i join 
    person p 
    on p.id = i.personId 
group by i.movieId 
having sum(p.name in ('John Travolta', 'Uma Thurman')) = 1;