Как отобразить столбец, созданный в коррелированном подзапросе SQL? - PullRequest
0 голосов
/ 13 февраля 2020

Я работаю с sql в курсе введения в базы данных, и у меня возникли некоторые проблемы с вопросом.

У меня есть база данных, которая должна отображаться как

 ID Name                     Description    Code    MaximumStudents StudentCount
 1  Computer Science 310 SQL    NULL        CS-HU310    10             8
 3  Communications              NULL        COMM113     5              4
 4  English                     NULL        ENG101      4              6
 5  Math                        NULL        MA030       5              3
 6  Electrical                  NULL        ECE230      10             0

Однако, когда я запускаю следующий запрос

    SELECT * 
    FROM Class
    WHERE EXISTS
    (SELECT COUNT(DISTINCT ClassStudent.StudentID) AS StudentCount
    FROM ClassStudent
    WHERE ClassID=c.ID);

Я не могу получить этот последний "StudentCount msgstr ", хотя подзапрос циклически повторяется в операторе select.

Есть ли способ заставить это работать так, как я собираюсь?

Я пытался добавить свой оператор select из подзапроса в мой список столбцов сразу после первого оператора select, но это немного повторяется, потому что он будет работать нормально без использования коррелированного подзапроса.

1 Ответ

1 голос
/ 13 февраля 2020

Переместите коррелированный подзапрос в select:

 SELECT c.*,
       (SELECT COUNT(DISTINCT cs.StudentID) AS StudentCount
        FROM ClassStudent cs
        WHERE cs.ClassID = c.ID
       )
FROM Class c;

EXISTS, чтобы проверить, возвращает ли подзапрос какие-либо строки. Запрос агрегации без GROUP BY всегда возвращает одну строку. Следовательно, ваш WHERE ничего не делает. Следовательно я удалил это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...