我正在尝试使用Sakila数据库显示演员出演的电影。
使用此查询:
$outerQuery =
"SELECT concat(a.last_name, ', ',a.first_name) as Actor, count(fa.actor_id) as Num_Films, f.title as Movie
FROM actor as a, film f
INNER JOIN film_actor fa ON a.actor_id = fa.actor_id
INNER JOIN film_actor fa1 ON fa.film_id = f.film_id
GROUP BY fa.actor_id
ORDER BY a.last_name;";
我得到以下输出:
Unknown column 'a.actor_id' in 'on clause'.
请帮助我这部分有很多错误。我能够按顺序显示演员名称以及他们出现的电影数量,但不能显示演员出演的某些电影。
答案 0 :(得分:1)
据我了解,您想获得每部actors
的电影数量。
我认为您有actor
,film
和film_actor
表,并且film_actor
表在actor
和film
表之间具有链接。所以;
您无需JOIN
第二次来查看film_actor表即可。另外,您还错过了film
和film_actor
表之间的链接。
GROUP BY
是错的。您需要将未聚合的列放入GROUP BY
中(仅当您在SELECT
中使用它们时)。
如果您可以提供表格结构,我们将为您提供更好的答案。利用您提供的信息,我相信以下查询可以为您提供帮助:
SELECT concat(a.last_name, ', ',a.first_name) as Actor
, count(fa.actor_id) as Num_Films
, f.title as Movie
FROM actor as a
INNER JOIN film_actor fa ON a.actor_id = fa.actor_id
INNER JOIN film f ON fa.film_id = f.film_id
GROUP BY concat(a.last_name, ', ',a.first_name),f.title
ORDER BY a.last_name;
编辑:如果要获取每个演员的电影数量,则不应该将film.title添加到选择中,否则,每行电影的数量将为1。我从查询中排除了电影信息:
SELECT concat(a.last_name, ', ',a.first_name) as Actor
, count(fa.actor_id) as Num_Films
--, f.title as Movie
FROM actor as a
INNER JOIN film_actor fa ON a.actor_id = fa.actor_id
--INNER JOIN film f ON fa.film_id = f.film_id
GROUP BY concat(a.last_name, ', ',a.first_name)
--,f.title
ORDER BY a.last_name;