抱歉标题很糟糕,我想不出更好的方式来描述我的问题,所以我通过示例很好地解释它来弥补它。
设置
如果您想继续,这里是为我的问题创建表的 SQL:
CREATE TABLE `student_sections` (`student_id` int(11) NOT NULL, `section_id` int(11) NOT NULL);
INSERT INTO `student_sections` (`student_id`,`section_id`) VALUES (1,11);
INSERT INTO `student_sections` (`student_id`,`section_id`) VALUES (1,12);
INSERT INTO `student_sections` (`student_id`,`section_id`) VALUES (1,13);
INSERT INTO `student_sections` (`student_id`,`section_id`) VALUES (1,14);
INSERT INTO `student_sections` (`student_id`,`section_id`) VALUES (1,15);
INSERT INTO `student_sections` (`student_id`,`section_id`) VALUES (2,12);
INSERT INTO `student_sections` (`student_id`,`section_id`) VALUES (2,13);
INSERT INTO `student_sections` (`student_id`,`section_id`) VALUES (2,14);
INSERT INTO `student_sections` (`student_id`,`section_id`) VALUES (2,21);
INSERT INTO `student_sections` (`student_id`,`section_id`) VALUES (2,22);
INSERT INTO `student_sections` (`student_id`,`section_id`) VALUES (2,23);
结果如下表:
| student_sections |
|-------------------------|
| student_id | section_id |
|------------|------------|
| 1 | 11 |
| 1 | 12 |
| 1 | 13 |
| 1 | 14 |
| 1 | 15 |
| 2 | 12 |
| 2 | 13 |
| 2 | 14 |
| 2 | 21 |
| 2 | 22 |
| 2 | 23 |
设想
我有一个“组”的部分,我必须找到与部分组合相关联的所有学生。我的应用程序将有几个“组”的部分。
对于 section_id 的“组 1”:(11,12,13,14,15) 学生 1 与所有部分 (11,12,13,14,15) 相关联。学生 2 与 (12,13,14) 相关联,但不与 (11,15) 相关联。
对于 section_id 的“组 2”:(21,22,23,24,25) 学生 2 与 (21,22,23) 相关联,但不与 (24,25) 相关联。
给定 section_id's (12,13,14) 我需要选择与那些 section_id's 相关联的 student_id,而不是与 section_id's (11,15) 相关联。
例如,如果给定 section_id's (12,13,14) 我想选择 student_id (2)。即使 student_id 1 与 section_id (12,13,14) 相关联,她也与 11 和 15 相关联,所以我不希望她的 id 返回。
此查询的更高目的是我将使用它作为子查询来选择给定部分组合的学生列表。
例如,如果给定 section_id 的 (12,13),则不会返回任何结果。
我试过的
我尝试混合使用 IN 和 NOT IN,但因为 5 行的 student_id 1 和 3 行与 (12,13,14) 相关联,所以以下查询中的 DISTINT() 返回 student_id 1 和 2。
SELECT
DISTINCT(student_id)
FROM
student_sections
WHERE
section_id IN (12,13,14)
AND section_id NOT IN (11,15)
2月1日更新
我添加了一些额外的用例数据,稍微改变了查询的要求。一个学生将被安排针对几个“组”的部分。