2013-11-08 5 views
0

Я пытаюсь выбрать студентов вместе с несколькими зарегистрированными каждым из них. Так что если студент не зачислен вообще ни на какие курсы, я хочу отобразить 0 или ничего. Прежде чем я смогу это сделать, я хочу, чтобы строка возвращала мне значение null, но этого не происходит. Это дает мне правильный результат, за исключением того, что у меня нет строки, которая равна нулю.Строка не возвращается NULL

SELECT s.STUDENT_ID, z.COURSE_NO, e.ENROLL_DATE, COUNT(*) AS ENROLLED 
FROM STUDENT s,ENROLLMENT e, SECTION z 
WHERE s.STUDENT_ID = e.STUDENT_ID 
AND e.SECTION_ID = z.SECTION_ID 
AND s.PHONE LIKE '702%' 
GROUP BY s.STUDENT_ID, z.COURSE_NO, e.ENROLL_DATE 

Так что, если он действительно вернется нуль для студентов, которые не ходят в какие-то курсы, которые я хотел сделать что-то вроде этого

SELECT lt.STUDENT_ID,lt.FIRST_NAME, lt.LAST_NAME, NVL(COUNT(ENROLLED), 0) AS ENROLLED 
FROM STUDENT lt 
LEFT OUTER JOIN 
(SELECT s.STUDENT_ID, z.COURSE_NO, e.ENROLL_DATE, COUNT(*) AS ENROLLED 
FROM STUDENT s,ENROLLMENT e, SECTION z 
WHERE s.STUDENT_ID = e.STUDENT_ID 
AND e.SECTION_ID = z.SECTION_ID 
AND s.PHONE LIKE '702%' 
GROUP BY s.STUDENT_ID, z.COURSE_NO, e.ENROLL_DATE) rt 
ON lt.STUDENT_ID = rt.STUDENT_ID 
GROUP BY lt.STUDENT_ID,lt.FIRST_NAME, lt.LAST_NAME; 

Как получить строку, которая возвращает нуль?

+0

вы должны прекратить использовать неявные соединения. Это апикальные антипаттеры и были использованы 20 лет назад для добра. И никогда ни при каких обстоятельствах никакие прикосновения и явные объединения не могут привести к неправильным результатам. – HLGEM

ответ

3

Используйте LEFT [OUTER] JOIN:

SELECT s.STUDENT_ID, z.COURSE_NO, e.ENROLL_DATE, COUNT(*) AS ENROLLED 
FROM STUDENT   s 
LEFT JOIN ENROLLMENT e ON e.STUDENT_ID = s.STUDENT_ID 
LEFT JOIN SECTION z ON z.SECTION_ID = e.SECTION_ID 
WHERE s.PHONE LIKE '702%' 
GROUP BY s.STUDENT_ID, z.COURSE_NO, e.ENROLL_DATE 

Details in the language reference.

+0

, который решает проблему ... любой запрос, который я использовал, всегда получаю тот же ответ. это действительно помогло ... спасибо! – Manual

Смежные вопросы