Count(*)来自子查询的属性

时间:2019-01-30 00:17:26

标签: mysql sql

问题: 您将如何显示外部查询中的一个字段,以及内部子查询中的另一个字段?

我的问题: 我需要显示演员的姓名以及每个人制作了多少部电影(即使他们没有参加过),没有任何左或右连接。

Star(starnumb, starname)
MovStar(starnumb, mvnumb)

我以前使用联接来显示信息;

SELECT starname, COUNT(movstar.starnumb) AS numMovies

我要解决的问题是有关明星参与Movstar关系中的电影数量的信息,而明星的名字也位于Star关系中。

SELECT starname, COUNT(*) AS numMovies
FROM star s
Where starnumb NOT IN
    (SELECT movstar.starnumb
    FROM movstar)
OR starnumb IN
(SELECT movstar.starnumb
    FROM movstar)
GROUP BY starname
ORDER BY numMovies DESC; 

代码可以运行,但是我无法获得正确的信息以在Count字段中显示;

SELECT starname, COUNT(*) AS numMovies

2 个答案:

答案 0 :(得分:1)

为什么不想使用联接?

SELECT s.starname, count(*) AS numMovies FROM star s LEFT JOIN movstar m ON m.starnumb = s.starnumb GROUP BY startname ORDER BY numMovies DESC

如果我对它的理解正确的话,应该可以满足您的要求。

答案 1 :(得分:1)

您可以关联子查询,例如通过将其列之一与外部查询中的列之一进行比较。如果找不到匹配的记录,count()将给出0

SELECT s.starname,
       (SELECT count(*)
               FROM movstat ms
               WHERE ms.starnumb = s.startnumb) nummovies
       FROM star s;