mysql - sql基于ANDing多个详细记录选择主记录

标签 mysql sql

我有如下所述的主表和明细表(带有代表性数据)。我想为生物和化学均获得“A”的学生选择(符合 mysql 标准)Student.id。

Students                      grades
id     name                   id   student_id  class        grade
1      ken                    1    1           Biology      A
2      beth                   2    1           Chemistry    A
3      joe                    3    1           Math         B
                              4    2           Biology      A
                              5    2           Chemistry    A
                              6    2           Math         A
                              7    3           Biology      B
                              8    3           Chemistry    A
                              9    3           Math         A

目前,我只是将所有数据提取到我的程序 (java) 中,但我认为 SQL 中必须有一种方法来获取正确的记录。

我从上面的数据中寻找的结果是 1 和 2(ken 和 beth)。我已经尝试了使用联接和内部选择的一些变体,但无法完全使其工作。我的主要问题似乎是我正在对我的详细记录进行 AND 运算,例如 ...其中grades.class='Biology' 和grades.grade='A'

我看了一下SQL select from header table where detail table rows have multiple values但这并没有让我到达我需要到达的地方。

非常感谢您的帮助。

最佳答案

试试这个

select s.id from students as s 
inner join grades as g on s.id=g.student_id
group by s.id
having max(case when g.class='Biology' and g.grade='A' then 1 else 0 end)=1
and
having max(case when g.class='Chemistry' and g.grade='A' then 1 else 0 end)=1

关于mysql - sql基于ANDing多个详细记录选择主记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40131877/

相关文章:

mysql ->= OR <= 组合会触发全表扫描吗?

如果给定的列值与上一行不同,则 mySQL 查询选择行

php - 检查多个日期范围以查找更广泛范围内的差距

php - MySQL INSERT 未使用 PHP 插入预期值

mysql - 将 Google Data Studio 连接到本地 Mysql 服务器

sql - 复杂的SQL查询问题

mysql - 聚合 SQL 查询

php - 登录后继续获取 "incorrect password error"

php - 将四张表合并为一张新表

SQL 条件选择