/ / SQL-запит із використанням кількох табличних об’єднань - sql, join, inner-join

SQL-запит з використанням кількох приєднань таблиці - sql, join, Internal-join

Я бився головою об стінуостанні кілька годин (незручно, я знаю), але я просто не можу змусити цей запит спрацювати! Я розглядав інші подібні запитання, бачив кілька підручників на Youtube, але з якоїсь причини я не можу змусити свій код працювати Отже, на жаль, я тут:

Запит повинен повертати три речі: DEPT (кафедра), CNUM (номер курсу) & CTITLE (назва курсу) посвідчення студента, який проходив курси протягом будь-якого даного семестру.

Наприклад, я намагаюся отримати свій запит із зазначенням відділу курсу, назви та номера особи, ідентифікатор якої 101 і пройшов курси навесні 2013 року. Нижче мій код:

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

Дані моєї таблиці наведені нижче: введіть опис зображення тут

Повертається такий запит: не вибрано рядків

Я НЕ шукаю когось, хто зробить за мене мою роботу, я просто шукаю пункт у правильному напрямку. Будь-яка порада буде вдячна, дякую!


Я вирішив цю проблему за допомогою васвсі, дякую вам Виявляється, я логічно міркував над цим неправильно - насправді в запис Spring не було вставлено значень, і, отже, результат не знайдених рядків є правильним!

Це був такий простий недогляд, але я це зрозумів. Всім велике спасибі; правильне рішення залишається таким:

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

Відповіді:

1 для відповіді № 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

Запустіть цей запит. Якщо ви отримаєте результати, розкоментуйте наступне внутрішнє приєднання. Якщо ви не отримаєте результатів, налагодьте, чому ваші умови не задоволені. Якщо ви отримаєте результат, розкоментуйте наступне приєднання. Сподіваюся, це допоможе.


1 для відповіді № 2

Не вдалося "знайти проблеми з вашим запитом на перший погляд.

Однак якщо стовпці SNUM та Year зберігаються як рядок, можливо, існує проблема з пробілом у лівій або правій частині рядка. Чи можете ви обрізати стовпець і спробувати ще раз?

 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 для відповіді № 3

Заява "Де" відсутня. Вам слід написати Де замість першого та.