问题: 您将如何显示外部查询中的一个字段,以及内部子查询中的另一个字段?
我的问题: 我需要显示演员的姓名以及每个人制作了多少部电影(即使他们没有参加过),没有任何左或右连接。
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
答案 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;