问题是选择在同一部电影中扮演2个或更多不同角色的演员。我得到了3张桌子,演员(id,姓名)电影(id,姓名)和演员(aid,mid,role)(aid是演员id,mid是电影id)我写了一个这样的查询
select a.name
from actor a, movie m, casts c
where a.id = c.aid and m.id = casts.mid
group by (m.name)
having count(distinct role) > 2;
这没有打印出正确的结果,我没有看到它的问题。感谢您的帮助!
这个怎么样?尝试执行查询时是否有任何错误?
select actor.name from actor, casts, movie
where casts.aid =actor.id
and casts.mid = movie.id
group by movie.name, actor.name
having count(distinct role) >= 2
由于casts
表似乎包含每个演员、电影和角色的一行(除非您省略了其他列),因此只要一对唯一值 aid
和 mid
出现在多行上,就意味着演员在该电影中扮演了多个角色。因此,没有理由使用distinct
。此外,由于所需的结果不包含电影名称,因此查询不需要也不应使用 movie
表。
如果 cast
表对于 (aid
、mid
和 role
的每个唯一组合只有一行,那么以下方法应该有效:
select name
from actor
where id in ( select aid
from casts
group by aid, mid
having count(*) > 1)