使用多表连接的SQL查询

时间:2016-09-07 03:52:41

标签: sql join inner-join

在过去的几个小时里,我一直在靠墙撞击(尴尬,我知道),但我似乎无法让这个查询起作用!我看过其他类似的问题,在Youtube上看过一些教程,但无论出于何种原因我都无法使用我的代码。所以,唉,我是:

该查询应返回三件事:DEPT(部门),CNUM(课程编号)& CTITLE(课程名称)学生在任何特定学期参加课程的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

我的表数据如下所示: enter image description here

返回以下查询:未选择任何行

我不是在寻找有人为我工作,我只是在寻找正确方向的一点。非常感谢任何建议,谢谢你!

我已经在你们的帮助下解决了这个问题,非常感谢你们。事实证明我在逻辑上思考这个错误的方法 - 实际上没有值插入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

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分:1)

set echo on

spool c:\is\program1.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 :(得分:0)

缺少Where声明。你应该写Where而不是第一个和。