“ on子句”中的未知列“ a.actor_id”

时间:2018-11-30 23:57:53

标签: sql

我正在尝试使用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'.

请帮助我这部分有很多错误。我能够按顺序显示演员名称以及他们出现的电影数量,但不能显示演员出演的某些电影。

1 个答案:

答案 0 :(得分:1)

据我了解,您想获得每部actors的电影数量。 我认为您有actorfilmfilm_actor表,并且film_actor表在actorfilm表之间具有链接。所以; 您无需JOIN第二次来查看film_actor表即可。另外,您还错过了filmfilm_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;