我被困在 SQL select 中,它有多个值

I got stuck in SQL select that has exactly multiple values

Table name: test
id - student - class
1 - Jane - A
2 - David - B
3 - Jane - C
4 - Nick - A
5 - Nick - B
6 - Smith - C
----------------

现在想查出同时录取了A和C的学生姓名class(必须是A和C) 结果将显示 Jane,因为她同时注册了 A 和 C

p/s:我正在使用 MS - ACCESS 2007

仅由 select 类 AC 学生分组。然后只录取那些有两个条目的学生

select student
from test
group by student
having sum(iif(class = 'A',1,0)) > 0
and sum(iif(class = 'B',1,0)) > 0

这是relational division的一个案例。我们在这里汇集了一系列技术:

  • How to filter SQL results in a has-many-through relation

应该是最快的解决方案之一:

SELECT student
FROM   test t1
JOIN   test t2 USING (student)
WHERE  t1.class = 'A'
AND    t2.class = 'C';

MS Access 有一个相当基本的 SQL 实现。并且它对字符串使用双引号(这与标准相矛盾):

SELECT test.student
FROM   test
INNER  JOIN test AS t2 ON test.student = t2.student
WHERE  test.class = "A"
AND    t2.class = "C";

DISTINCT(或结果分组)仅在组合 (student, class) 不唯一时才需要 - 在大多数用例中它应该是唯一的。

记下 A Class 学生和 C Class 学生的名字并对这些结果集

Intersection
select distinct
 a.student
from
 test a
 inner join test b on a.id = b.id
 where a.class = 'A' and b.class= 'C'

这是一种方式:

SELECT DISTINCT STUDENT 
FROM TEST T 
WHERE 
EXISTS (SELECT NULL FROM TEST T1 WHERE T.STUDENT = T1.STUDENT AND T1.CLASS='A') AND
EXISTS (SELECT NULL FROM TEST T2 WHERE T.STUDENT = T2.STUDENT AND T2.CLASS='C');