我被困在 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 类 A
和 C
学生分组。然后只录取那些有两个条目的学生
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');
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 类 A
和 C
学生分组。然后只录取那些有两个条目的学生
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');