2016-10-02 60 views
1

给定多个表我试图编写一个查询来返回满足特定计数子句的名称。SQL查询返回多个表的特定属性的名称和计数

我有表:

genre(genre, movieid) 
moviedirectors(movieid, directorid) 
directors(directorid, firstname, lastname) 

我想写一个返回执导的喜剧流派的至少50个电影导演的第一和最后一个名称的查询,并返回该数字为好。

这是我

select d.fname, d.lname, count(*) 
from genre g, directors d, moviedirectors md 
where g.genre='Comedy' and g.movieid=md.movieid and  
        md.directorid=d.directorid 
group by d.id 
having count(*) >= 50 

我相信这应该是正确的,但是当我在命令行中运行此查询它永远不会完成。我等了30分钟,没有结果。

+0

你的桌子有多大?请注意,你的'SELECT'子句中包含非聚合列,它甚至不会在大多数数据库中运行(q.v.下面的@varontron的答案)。 –

+0

这看起来像是我在一个mooc课上的作业问题。 – Marichyasana

回答

0

需要内部连接:

SELECT d.fname 
     d.lname 
FROM genre g 
INNER JOIN moviedirectors md 
    ON g.movieid = md.movieid 
INNER JOIN directors d 
    ON md.directorid = d.directorid 
WHERE g.genre = 'Comedy' 
GROUP BY d.fname,  -- group by columns in select 
     d.lname 
HAVING COUNT(*) >= 50 
+0

键入INNER JOIN和JOIN是否有区别。我以前使用过JOIN,但没有运行。你为什么按d.fname,d.lname而不是d.id来分组? – Misohappi

+0

@Misohappi。 。 。 'INNER JOIN'和'JOIN'是一回事。 –

0

选择c.firstname,c.lastname,从数((e.movi​​eid)选择*从董事,电影b,其中b.genre =“喜剧。 '和b.movi​​eid = a.movi​​eid)d,director c其中c.directorid = d.directorid group by e.movi​​eid具有count(e.movi​​eid)> 50;