/ / Zapytanie SQL przy użyciu wielu połączeń tabel - sql, złączenie, łączenie wewnętrzne

Kwerenda SQL za pomocą wielu sprzężeń tabel - sql, łączyć, łączyć wewnętrznie

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: wprowadź opis obrazu tutaj

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 № 1
set 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.