Вопрос: Как бы вы отобразили одно поле из внешнего запроса, а другое из внутреннего подзапроса?
Моя проблема: мне нужно отобразить имена актеров и сколько фильмов каждый снял (даже если их не было) без каких-либо левых или правых соединений.
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
Вы можете сопоставить подзапрос, например, сравнив один из его столбцов с одним из столбцов внешнего запроса. И count()
выдаст 0
если не найдено подходящих записей.
SELECT s.starname,
(SELECT count(*)
FROM movstat ms
WHERE ms.starnumb = s.startnumb) nummovies
FROM star s;
Почему вы не хотите использовать join?
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
должен получить то, что вы просите, если я правильно понял.