【发布时间】:2016-09-07 03:52:40
【问题描述】:
在过去的几个小时里,我一直在用头撞墙(我知道这很尴尬),但我似乎无法让这个查询工作!我看过其他类似的问题,在 Youtube 上看过一些教程,但无论出于何种原因,我都无法让我的代码正常工作。所以,唉,我在这里:
该查询应该返回三项内容:DEPT(部门)、CNUM(课程编号)和 CTITLE(课程名称)的学生 ID,该学生 ID 在任何给定学期学习过课程。
例如,我试图让我的查询说明 ID 为 101 并在 2013 年春季参加课程的个人的课程部门、职务和编号。以下是我的代码:
set echo on
spool c:\is\program1.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:\is\program1.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
【问题讨论】:
-
是否有理由将所有条件放在连接语句而不是 WHERE 子句上?除非有特定原因,否则您可能缺少 WHERE 子句。
-
嗨菲利普。没有特别的原因,我只是看到以这种方式完成的类似问题,我希望得到积极的结果。以前的海报还建议我将第一个条件更改为“where”,但它返回的结果相同:未选择任何行。
-
您在架构中提供了 2 个额外的表,但未在查询中显示它们。照原样,我怀疑您的查询会返回一个结果——MIS 简介。您是否可能加入
PreReq而cnum300 不存在? -
这就是我调试多个连接的方式。首先我将在关联连接中添加相关条件。所以我的查询将类似于:---- 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' ----- 只需从一个连接开始并检查结果,然后添加另一个,然后添加最后一个。你会发现是哪个连接导致了问题,然后修复它。
-
找出问题的最简单方法是一次运行一个表的查询。从寻找该学生的学生中进行选择,如果您获得了预期的结果,则将加入添加到注册等中,直到您没有获得预期的结果。
标签: sql join inner-join