Получение неправильных результатов для моих SQL запросов - почему это так? - PullRequest
0 голосов
/ 20 апреля 2020

У меня 8 таблиц -

Course(Courseno,Coursename,dept)
Section(Courseno,Sectionno),
Student(ssn,firstname,lastname,street,zip,city,state),
Enrolls(ssn,Sectionno,Courseno),Exam(Courseno,Sectionno,Examno),
Classroom(roomno,building,capacity),
conducted_in(roomno,building,Courseno,Sectionno,Examno) 
Takes(ssn,Courseno,Sectionno,Examno,result)

Я пишу два запроса. 1-й запрос - получить названия и номера курсов, в которых участвуют 2 или более студентов. Я написал его как

mysql> SELECT c.CourseNo,Course_Name FROM STUDENT s INNER JOIN ENROLLS e 
ON s.SSN=e.SSN INNER JOIN COURSE c ON e.CourseNo=c.CourseNo WHERE e.SSN>=2;

и получаю вывод как

+----------+-----------------------+
| CourseNo | Course_Name           |
+----------+-----------------------+
| CSC11    | Computer Architecture |
| CSC12    | VLSI                  |
| CSC12    | VLSI                  |
+----------+-----------------------+
3 rows in set (0.00 sec)

для 2-го запроса, который он говорит, чтобы получить информацию (номер экзамена, номер курса и номер секции) об экзаменах проходящий в здании "РВР". Наряду с этим получите номер комнаты, номер комнаты и название здания. я написал запрос как -

mysql> SELECT e.ExamNo,e.CourseNo,e.SectionNo,cr.RoomNo,cr.Building FROM EXAM e 
INNER JOIN CONDUCTED_IN ci ON ci.ExamNo=e.ExamNo INNER JOIN CLASS_ROOM cr 
ON cr.Building=ci.Building='RVR';

и получил вывод как

Пустой набор, 1 предупреждение (0,00 se c)

Несмотря на то, что RVR здания присутствует в таблице

Какие ошибки я делаю, так как я не получаю желаемый результат ?? пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 20 апреля 2020

Попробуйте следующее для Question 2, вы не добавили условие WHERE в свой запрос. это была проблема on cr.Building=ci.Building='RVR'

select e.ExamNo,
    e.CourseNo,
    e.SectionNo,
    cr.RoomNo,
    cr.Building 
from EXAM e 
JOIN CONDUCTED_IN ci 
on ci.ExamNo=e.ExamNo 

JOIN CLASS_ROOM cr 
on cr.Building=ci.Building

WHERE cr.Building = 'RVR';

для Question 1, вы забыли использовать DISTINCT, и тот же результат может быть достигнут также GROUP BY.

SELECT 
    DISTINCT c.CourseNo,
    Course_Name 
FROM STUDENT s 

JOIN ENROLLS e 
ON s.SSN=e.SSN 

JOIN COURSE c 
ON e.CourseNo=c.CourseNo 

WHERE e.SSN>=2;
...