如何获得多对多关系中没有表示的行?

Yes*_*ke. 3 sql t-sql sql-server

我在学生和班级之间有多对多的关系,如下所示.我想获得所有未注册任何课程的学生的ID.

多对多的关系

由于数据集的大小,我想避免使用NOT IN.有更有效的解决方案吗?

Joe*_*lli 8

NOT EXISTS应该给你最好的表现.有关详细信息,请参阅左外连接与NOT EXISTS.

SELECT s.StudentID
    FROM student s
    WHERE NOT EXISTS(SELECT NULL
                         FROM student_class sc
                         WHERE sc.StudentID = s.StudentID)
Run Code Online (Sandbox Code Playgroud)

  • @Jeremy - [这是另一个适合你的](http://explainextended.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server/ ).随意添加一个带有计数器示例的答案,该示例演示了"LEFT OUTER JOIN ... NULL"表现更好的情况.我会赞成它! (2认同)