为什么相关子查询结果不能用于外部查询?
在下面的查询中,我想访问外部查询中内部corrleated查询中的计数。但它给出了错误。
我做错了什么?
referenct - 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)
答案 0 :(得分:3)
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 :(得分:1)
问题是要问两件事。一个主演角色,两个至少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
答案 2 :(得分:0)
SELECT
名称FROM
在actor.id = casting.actorid上投射JOIN
演员
WHERE
ord = 1 GROUP BY
名称
HAVING COUNT
(movieid)&gt; = 30
答案 3 :(得分:0)
选择名称 从演员 JOIN cast on(id = actorid AND(SELECT COUNT(ord)from cast) 在哪里actorid = actor.id AND ord = 1)> = 30) GROUP BY名称