0

以下のスキーマがあります。

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

アクション映画など、1 つのジャンルだけで活躍した俳優の詳細のリストを出力したいと考えています。映画とジャンルは 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, 
4

2 に答える 2

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'
于 2013-10-13T12:34:19.310 に答える
0

2 番目のクエリの SELECT リストに COUNT(*) がありません。また、2 番目のクエリが括弧で囲まれているのはなぜですか? 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;
于 2013-10-13T12:34:37.150 に答える