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

问题描述 投票:1回答:4

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

在下面的查询中,我想访问外部查询中内部相关查询中的计数。但它给出了错误。

我究竟做错了什么?

参考 - 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)

sql oracle correlated-subquery
4个回答
3
投票

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;


1
投票

问题是要问两件事。一个主演角色,两个至少30次。您可以使用WHERE解决第一个问题,然后将结果分组计数。最后使用HAVING来过滤第二个问题。

您可以在HAVING语句中使用COUNT函数。

SQL Fiddle

0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.