繁体   English   中英

为什么关联的子查询结果不能用于外部查询?

[英]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) 

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;

SQL小提琴

问题是要问两件事。 一位主演,两次至少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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM