Неверный порядок идентификаторов по команде sql после объединения - PullRequest
2 голосов
/ 13 февраля 2020

Я пытался найти похожий вопрос, но не могу. Мы просто пытаемся выполнить простой запрос с объединением, и мы получаем ошибку «неверный идентификатор» в последней строке. Кто-нибудь знает, как организовать скобки, чтобы сделать это действительным? Мы перепробовали так много способов.

SELECT DISTINCT E.CID
FROM Enrollments E, Students S
WHERE E.SID = S.SID AND (S.Major <> 'CS' OR S.Major IS NULL) 
GROUP BY E.CID
HAVING 10 > COUNT (*)
UNION SELECT DISTINCT C.CID
              FROM COURSES C
              MINUS 
       SELECT DISTINCT E3.CID 
              FROM Enrollments E3, Students S2
              WHERE E3.SID = S2.SID 
              GROUP BY E3.CID
              HAVING 0 < COUNT (*)
ORDER BY E.CID DESC;

сообщение об ошибке:

ОШИБКА в строке 14:

ORA-00904: "E". "CID": неверный идентификатор

РЕДАКТИРОВАТЬ: Просто, чтобы вы знали, какова цель, все классы с менее чем 10 не CS майоров наряду со всеми пустыми классами.

1 Ответ

1 голос
/ 13 февраля 2020
  1. Вы выбираете E.CID
  2. Затем вы создаете объединение с другим запросом, в котором вы выбираете C.CID
  3. В предложении упорядочить по столбец называется CID, а не E.CID
  4. И добавить к этому, как прокомментировал Импелар относительно столбца E.CID в выражении group by:

    "E.CID не существует на уровне последней строки. Он существует только в объеме первого запроса (строки 1-5)"

    SELECT DISTINCT E.CID
    FROM Enrollments E, Students S
    WHERE E.SID = S.SID AND (S.Major <> 'CS' OR S.Major IS NULL) 
    HAVING 10 > COUNT (*)              
    GROUP BY E.CID  
    UNION SELECT DISTINCT C.CID
                 FROM COURSES C
          MINUS 
          SELECT DISTINCT E3.CID 
                 FROM Enrollments E3, Students S2
                 WHERE E3.SID = S2.SID 
           GROUP BY E3.CID
           HAVING 0 < COUNT (*)
    ORDER BY CID DESC;
    

Вот демо без ошибок

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