【问题标题】:SQL Server : get all data from one table but condition on 2nd tables columnSQL Server:从一个表中获取所有数据,但条件是第二个表列
【发布时间】:2019-10-31 05:35:02
【问题描述】:

我有 3 张桌子 StudentClassesStudentClasses

学生表:

表:

StudentClasses表:

我正在尝试的是

select 
    c.ClassID, sc.StudentID, Title, 
    ClassFrom as ClassDate, ClassTo as ClassTime,
    Duration, Type as SessionType, sc.Status as StatusJoin
from 
    Classes c 
left join 
    StudentClasses sc on sc.ClassID = c.ClassID 
where 
    sc.StudentID = '66919287-d63d-4b30-931f-30532b68c2f1' or 
    sc.StudentID IS NULL

这会返回:

我认为这是正确的,但是当我将其更改为:

where sc.StudentID = '5a22f025-ae64-49b8-9782-32bc2f1ccef6'

返回:

这应该返回所有 4 个学生 ID 和加入日期为空的班级

问题是:我希望这里是所有课程,而不是一些学生加入,如果加入,那么应该有 Studentid 和 JoiningDate,否则这些列可以为空

【问题讨论】:

    标签: sql-server database sql-server-2017


    【解决方案1】:

    在 ON 子句中使用你的条件而不是 Where

     select c.ClassID,sc.StudentID,Title,ClassFrom as ClassDate,ClassTo as 
           ClassTime,Duration,Type as SessionType,sc.Status as StatusJoin
           from Classes c 
           left join StudentClasses sc on sc.ClassID = c.ClassID 
           and (sc.StudentID = '66919287-d63d-4b30-931f-30532b68c2f1' or 
           sc.StudentID IS NULL)
    

    【讨论】:

      【解决方案2】:

      选择 c.ClassID,sc.StudentID,Title,ClassFrom 作为 ClassDate,ClassTo 作为 ClassTime,Duration,Type 为 SessionType,sc.Status 为 StatusJoin 来自 c 类 left join StudentClasses sc on sc.ClassID = c.ClassID

      也会有帮助!!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-18
        相关资源
        最近更新 更多