Count (*) атрибут из подзапроса

0

Вопрос: Как бы вы отобразили одно поле из внешнего запроса, а другое из внутреннего подзапроса?

Моя проблема: мне нужно отобразить имена актеров и сколько фильмов каждый снял (даже если их не было) без каких-либо левых или правых соединений.

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 ответа

1
Лучший ответ

Вы можете сопоставить подзапрос, например, сравнив один из его столбцов с одним из столбцов внешнего запроса. И count() выдаст 0 если не найдено подходящих записей.

SELECT s.starname,
       (SELECT count(*)
               FROM movstat ms
               WHERE ms.starnumb = s.startnumb) nummovies
       FROM star s;
  • 0
    Большое спасибо Sticky Bit! Я не осознавал, что могу выполнять подзапросы в предложении Select.
0

Почему вы не хотите использовать 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

должен получить то, что вы просите, если я правильно понял.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню