[英]Why correlated subquery result cannot be used in outer query?
为什么关联的子查询结果不能用于外部查询?
在下面的查询中,我想在外部查询中访问内部相关查询中的计数。 但它给出了错误。
我究竟做错了什么?
参考 - http://sqlzoo.net/wiki/More_JOIN_operations#Looking_at_the_id_field 。
问题 - 14(获取按字母顺序排列的至少担任过 30 个主演角色的演员名单。)
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)
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函数。
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
SELECT
姓名FROM
铸造JOIN
演员上actor.id = casting.actorid WHERE
ORD = 1 GROUP BY
名称HAVING COUNT
(movieid)> = 30
SELECT name from actor JOIN cast on(id = actorid AND(从铸造WHERE actorid = actor.id AND ord = 1)中选择COUNT(ord)> = 30)GROUP BY名称
对我来说,这很好用:
select actor.name
from actor
join casting on casting.actorid=actor.id
join movie on casting.movieid=movie.id
where casting.ord=1
group by actor.name
having count(actor.name) > 29
order by actor.name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.