SQL - 选择在每个科目上都参加过考试的学生

标签 sql select

我有两个表: 考试(学生 ID、科目 ID)、 主题(主题ID)

并且想要选择所有科目都经过考试的学生。怎么做? 不使用 GROUP 和 COUNT 是否可以?

最佳答案

您可以通过多种方式做到这一点。其中之一:

DECLARE @students TABLE ( id INT )
DECLARE @exams TABLE ( id INT )
DECLARE @studentexams TABLE
    (
      studentid INT ,
      examid INT
    )

INSERT  INTO @exams
VALUES  ( 1 ),
        ( 2 )
INSERT  INTO @students
VALUES  ( 1 ),
        ( 2 ),
        ( 3 )
INSERT  INTO @studentexams
VALUES  ( 1, 1 ),
        ( 1, 2 ),
        ( 2, 1 )


SELECT  *
FROM    @students s
WHERE   NOT EXISTS ( SELECT *
                     FROM   @exams e
                     WHERE  e.id NOT IN ( SELECT    se.examid
                                          FROM      @studentexams se
                                          WHERE     se.studentid = s.id ) )

输出:

id
1

关于SQL - 选择在每个科目上都参加过考试的学生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28252775/

相关文章:

mysql - SQL 按一列中的多个值组分组

select - Go select 语句解决方法中的优先级

javascript - jquery change() 事件表现得很奇怪

sql - SQL下面的GORM(grails)条件是什么?

mysql 连接日期,其中一个表的日期是一个月前

sql - 有没有办法同时搜索 2 个或更多字段?

linux - 当您调用 select(2) 时,内核如何确定套接字已准备就绪?

python - django 查询中的 sql "LIKE"等效项

sql - MySQL:如何按列按升序排序,并在末尾显示 NULL 而不是开头?

php - 如何使用 PHP 和 SQL 数据库来更改 HTML <h> 内容?