/ /複数のテーブル結合を使用したSQLクエリ-sql、join、inner-join

複数のテーブル結合を使用したSQLクエリ-sql、join、inner-join

私は壁に頭を打ちつけてきました過去数時間(恥ずかしい、私は知っています)、しかし私はこのクエリを機能させることができないようです!私は他の同様の質問を見て、Youtubeでいくつかのチュートリアルを見ましたが、何らかの理由でコードを機能させることができません。だから、悲しいかな、私はここにいます:

クエリは、特定の学期中にコースを受講した学生のIDのDEPT(部門)、CNUM(コース番号)、およびCTITLE(コースタイトル)の3つを返すことになっています。

たとえば、IDが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

このクエリを実行します。結果が得られたら、次の内部結合のコメントを解除します。結果が得られない場合は、条件が満たされない理由をデバッグします。結果が得られた場合は、次の結合のコメントを解除します。お役に立てば幸いです。


回答№2の場合は1

一見したところ、クエリに関する問題は見つかりませんでした。

それでも、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"

回答№3の場合は0

Whereステートメントがありません。最初のとの代わりにWhereと書く必要があります。