我有如下所述的主表和明细表(带有代表性数据)。我想为生物和化学均获得“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/