2013-10-13 11 views
0

我有下面的模式。獲取所有屬於同一類別的值

MovieInfo (mvID, title, rating, year, length, studio) 
DirectorInfo(directorID, firstname, lastname) 
DirectInfo(mvID*, directorID*) 
GenreInfo(mvID*, genre) 

我正在尋找輸出演員的細節的列表,只能在1種流派,例如動作電影。電影類型是一對多的關係。

我有這個到目前爲止,但我得到的錯誤。

SELECT ActorInfo.ActorID, ActorInfo.firstname, ActorInfo.lastname 
FROM ActorInfo, GenreInfo, CastInfo 
WHERE CastInfo.mvID = GenreInfo.mvID 
AND CastInfo.ActorID = ActorInfo.ActorID 
AND Genreinfo.genre = 'ACtion' 
MINUS 
(SELECT ActorInfo.ActorID, ActorInfo.firstname, ActorInfo.lastname, 
FROM ActorInfo, GenreInfo, CastInfo 
WHERE CastInfo.mvID = GenreInfo.mvID 
AND CastInfo.ActorID = ActorInfo.ActorID 
AND Genreinfo.genre != 'Action') 
GROUP BY ActorInfo.ActorID, ActorInfo.firstname, ActorInfo.lastname, 
+0

你得到什麼錯誤? –

+0

失蹤的表情 – user2873893

回答

0

我看到你缺乏在第二個查詢的SELECT列表COUNT(*)。另外,爲什麼在括號中的第二個查詢?爲什麼查詢之外的GROUP BY子句?

問題是,在第一個查詢中,您有ACtion字符串,而不是Action--這是不一樣的。

試試這個:

SELECT ActorInfo.ActorID, ActorInfo.firstname, ActorInfo.lastname 
    FROM ActorInfo, GenreInfo, CastInfo 
WHERE CastInfo.mvID = GenreInfo.mvID 
    AND CastInfo.ActorID = ActorInfo.ActorID 
    AND Genreinfo.genre = 'Action' 
MINUS 
SELECT ActorInfo.ActorID, ActorInfo.firstname, ActorInfo.lastname 
    FROM ActorInfo, GenreInfo, CastInfo 
WHERE CastInfo.mvID = GenreInfo.mvID 
    AND CastInfo.ActorID = ActorInfo.ActorID 
    AND Genreinfo.genre != 'Action' 
GROUP BY ActorInfo.ActorID, ActorInfo.firstname, ActorInfo.lastname; 
+0

對不起,我編輯了我在我的問題中的Querey。我從工作中貼上了錯誤的東西,數不是必要的。如果我拿出計數它不會返回結果。 – user2873893

+0

@ user2873893檢查我編輯的答案。問題是,我想,你有'ACtion'字符串而不是'Action'。 –

+0

是的,我調整了。它仍然返回一個空表。似乎查詢是相互取消。 – user2873893

0

也許就像這樣:

select 
     ActorInfo.ActorID, ActorInfo.firstname, ActorInfo.lastname, max(genre) 
from 
     ActorInfo, 
     GenreInfo, 
     CastInfo 
where 
     CastInfo.ActorID = ActorInfo.ActorID and 
     CastInfo.mvID = GenreInfo.mvID 
group by 
     ActorInfo.ActorID, ActorInfo.firstname, ActorInfo.lastname 
having 
     count(distinct genre) =1 and 
     max(genre) = 'Action' 
+0

對不起,我編輯了我在我的問題中的Querey。我從工作中貼上了錯誤的東西,數不是必要的。我正在尋找只有一種類型的演員。 – user2873893

+0

如果您只需要唯一的流派演員名單,您可以從最後刪除max()。這是你的意思? –

+0

仍然需要指定類型是什麼類型。可以說'行動'。所以需要所有隻在動作片中表演過的演員。 – user2873893