为什么相关子查询结果不能用于外部查询?
在下面的查询中,我想访问外部查询中内部相关查询中的计数。但它给出了错误。
我究竟做错了什么?
参考 - qazxsw poi。
问题14(按照至少有30个主演角色的演员的字母顺序获得一个列表。)
http://sqlzoo.net/wiki/More_JOIN_operations#Looking_at_the_id_field
以下查询工作正常。
select distinct a.name , t.count
from actor a
join casting c
on (a.id= c.actorid)
where 25< (select count(movieid) as count
from casting c1
where c1.actorid= a.id) as t
order by a.name
select distinct a.name, (select count(movieid) as count
from casting c1
where c1.actorid= a.id)
from actor a
join casting c
on (a.id= c.actorid)
http://sqlfiddle.com/#!4/4e7be/8是子查询中的一列,但它不是外连接的一部分。因此,它在子查询本身之外是不可见的。
解决这个问题的一种更简单的方法是通过计算连接本身的计数,如下所示:
count
select a.name, count(movieid)
from
actor a
join casting c
on a.id = c.actorid
group by a.name, a.id
having count(movieid) > 3
order by a.name;
问题是要问两件事。一个主演角色,两个至少30次。您可以使用WHERE解决第一个问题,然后将结果分组计数。最后使用HAVING来过滤第二个问题。
您可以在HAVING语句中使用COUNT函数。
SQL Fiddle
SELECT actor.name
FROM actor JOIN casting ON actor.id = casting.actorid
WHERE ord = 1
GROUP BY actor.name
HAVING COUNT(actor.name) >= 30
ORDER BY actor.name
name SELECT
在actor.id = casting.actorid上施放FROM
演员JOIN
ord = 1 WHERE
name GROUP BY
(movieid)> = 30
SELECT name FROM actor JOIN cast ON(id = actorid AND(SELECT COUNT(ord)FROM FROM casting WHERE actorid = actor.id AND ord = 1)> = 30)GROUP BY name