2014-11-03 46 views
1

我使用下面的查询标识类别中最受欢迎的男演员(topActor):我应该如何修改我的查询

SELECT category_id AS cid, 
    (SELECT actor_id FROM 
film_actor JOIN film_category 
    ON film_actor.film_id = film_category.film_id 
     WHERE category_id = cid 
     GROUP BY actor_id 
     ORDER BY COUNT(*) DESC 
     LIMIT 0,1) AS topActor 
FROM film_actor JOIN film_category 
    ON film_actor.film_id = film_category.film_id 
GROUP BY category_id 


+-----+----------+ 
| cid | topActor | 
+-----+----------+ 
| 1 |  50 | 
| 2 |  150 | 
| 3 |  17 | 
| 4 |  86 | 
| 5 |  196 | 
| 6 |  48 | 
| 7 |  7 | 
| 8 |  79 | 
| 9 |  164 | 
| 10 |  68 | 
| 11 |  27 | 
| 12 |  108 | 
| 13 |  105 | 
| 14 |  107 | 
| 15 |  83 | 
| 16 |  44 | 
+-----+----------+ 
16 rows in set (0.00 sec) 

现在我需要获得相应的演员的FIRST_NAME姓氏演员,含actor_id,姓氏姓氏。我知道如何使用PL/SQL或SAS来完成它,但我是MySQL的新手。请帮忙!谢谢。

+0

而不是在'SELECT'子句中使用嵌套查询 - 加入它 – zerkms 2014-11-03 07:43:50

+0

请发布一个sql filddle或atleast您的相关db结构。 – 2014-11-03 07:53:21

回答

0

据我所知,你想从演员的表中获得fname和lname的值,而外键是actor_id,所以我认为这样做。

SELECT category_id AS cid, 
(SELECT actor_id FROM 
film_actor JOIN film_category 
ON film_actor.film_id = film_category.film_id 
    WHERE category_id = cid 
    GROUP BY actor_id 
    ORDER BY COUNT(*) DESC 
    LIMIT 0,1) AS topActor, actor.fname, actor.lname 
FROM film_actor inner JOIN film_category 
ON film_actor.film_id = film_category.film_id inner join actor on film_actor.actor_id = actor.id 
GROUP BY category_id 

我真的不明白什么是你的问题,因此,如果这个答案是错的,告诉我哪个部分。

+0

非常感谢!我对不清楚我的问题表示抱歉。尽管如此,你理解并完美回答! – Vera 2014-11-03 09:02:21