Uderzałem głową o ścianęostatnich kilka godzin (żenujące, wiem), ale po prostu nie wydaje mi się, aby to zapytanie zadziałało! Spojrzałem na inne podobne pytania, widziałem kilka samouczków na Youtube, ale z jakiegokolwiek powodu nie mogę uruchomić mojego kodu Tak więc, niestety, jestem:
Zapytanie ma zwrócić trzy rzeczy: DEPT (dział), CNUM (numer kursu) i CTITLE (tytuł kursu) identyfikatora studenta, który uczestniczył w kursie w danym semestrze.
Na przykład próbuję uzyskać zapytanie, aby podać dział kursu, tytuł i numer osoby, której identyfikator to 101, i wziął udział w kursach wiosną 2013 r. Poniżej znajduje się mój kod:
set echo on
spool c:isprogram1.txt
SELECT Courses.DEPT, Courses.CNUM, Courses.CTITLE
FROM Students
INNER JOIN Enrollments
ON Students.SNUM = Enrollments.SNUM
INNER JOIN SchClasses
ON Enrollments.CallNum = SchClasses.Callnum
INNER JOIN Courses
ON SchClasses.CNUM = Courses.CNUM
AND Students.SNUM = "101"
AND SchClasses.Semester = "Sp"
AND SchClasses.Year = "2013";
spool off
Dane mojej tabeli pokazano poniżej:
Zwraca następujące zapytanie: nie wybrano wierszy
NIE szukam kogoś, kto wykonałby dla mnie swoją pracę, szukam tylko punktu we właściwym kierunku. Wszelkie porady byłyby bardzo mile widziane, dziękuję bardzo!
Rozwiązałem ten problem z twoją pomocąwszystko bardzo dziękuję Okazuje się, że logicznie myślałem o tym w niewłaściwy sposób - w rzeczywistości nie wprowadzono żadnych wartości do rekordu Spring, a zatem wynik nie znalezienia wierszy jest poprawny!
To był taki prosty nadzór, ale ja to rozgryzłem. Bardzo wam wszystkim dziękuję; prawidłowe rozwiązanie pozostaje następujące:
set echo on
spool c:isprogram1.txt
SELECT Courses.DEPT, Courses.CNUM, Courses.CTITLE
FROM Students
INNER JOIN Enrollments
ON Students.SNUM = Enrollments.SNUM
INNER JOIN SchClasses
ON Enrollments.CallNum = SchClasses.Callnum
INNER JOIN Courses
ON SchClasses.CNUM = Courses.CNUM
AND Students.SNUM = "101"
AND SchClasses.Semester = "Sp"
AND SchClasses.Year = "2013";
spool off
Odpowiedzi:
1 dla odpowiedzi № 1set echo on
spool c:isprogram1.txt
SELECT *
FROM Students
INNER JOIN Enrollments
ON Students.SNUM = Enrollments.SNUM AND Students.SNUM = "101"
--INNER JOIN SchClasses
-- ON Enrollments.CallNum = SchClasses.Callnum AND SchClasses.Semester "Sp" AND SchClasses.Year = "2013";
-- INNER JOIN Courses ON SchClasses.CNUM = Courses.CNUM
Uruchom to zapytanie. Jeśli otrzymasz wyniki, odkomentuj następne połączenie wewnętrzne. Jeśli nie otrzymujesz wyników, debuguj, dlaczego twoje warunki nie są spełnione. Jeśli otrzymasz wynik odkomentujący przy następnym dołączeniu. Mam nadzieję, że to pomoże.
1 dla odpowiedzi nr 2
Nie można znaleźć problemów z zapytaniem za pierwszym razem.
Mimo to, jeśli kolumny SNUM i Year są przechowywane jako ciąg znaków, może istnieć ryzyko wystąpienia spacji po lewej lub prawej stronie ciągu. Czy możesz przyciąć kolumnę i spróbować ponownie?
SELECT Students.SNUM ,Enrollments.SNUM ,Enrollments.CallNum ,SchClasses .CallNum
FROM Students
INNER JOIN Enrollments
ON Students.SNUM = Enrollments.SNUM
AND Students.SNUM = "101"
LEFT JOIN SchClasses
ON LTRIM(RTRIM(Enrollments.CallNum)) = LTRIM(RTRIM(SchClasses.CallNum))
--AND LTRIM (RTRIM (schClasses.Semester)="sp"
--AND LTRIM (RTRIM(schClasses.Year))="2013"
0 dla odpowiedzi № 3
Brak instrukcji Where. Powinieneś napisać Where zamiast pierwszego i.