Sql 获取一个类别中独占的所有值

Sql 获取一个类别中独占的所有值,sql,oracle,Sql,Oracle,我有下面的模式 MovieInfo (mvID, title, rating, year, length, studio) DirectorInfo(directorID, firstname, lastname) DirectInfo(mvID*, directorID*) GenreInfo(mvID*, genre) 我期待着输出的演员谁曾在1个流派的工作,如动作电影的细节清单。电影与流派是一对多的关系 到目前为止,我有这个问题,但我有错误 SELECT ActorInfo.ActorI

我有下面的模式

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, 
也许是这样:

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'
我发现您在第二个查询的选择列表中缺少COUNT(*)。另外,为什么第二个查询在括号中?为什么GROUPBY子句在查询之外

问题是在第一个查询中,您有
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;

你犯了什么错误?对不起,我编辑了我问题中的问题。我粘贴了错误的一个从我的工作,计数是没有必要的。如果我去掉计数,它不会返回任何结果。@user2873893检查我编辑的答案。问题是,我猜,你有
ACtion
字符串而不是
ACtion
。是的,我调整了。它仍然返回一张空桌子。似乎该查询相互抵消。您的数据库中是否有只在动作片中演出的演员?抱歉,我编辑了我问题中的查询。我粘贴了错误的一个从我的工作,计数是没有必要的。我正在寻找只在一种类型中工作过的演员。如果您只需要唯一的类型演员列表,可以从末尾删除max()。这就是你的意思?仍然需要指定流派类型。让我们说“行动”。所以需要所有只在动作片中表演的演员。我在选择中添加了一个max(类型)。它应该会给你预期的结果。