帮助MySQL中的嵌套查询

时间:2009-03-04 21:49:30

标签: mysql

我有一个Student_classes表,如下所示:

Student_classes

Student      Classes
 Jon w.      Algebra
 Jon w.      Algebra
 Jake        English
 Scott       Spanish
 Scott       Korean
 Neo         Physics
 Anderson    Chemistry
 Anderson    Psychology

我需要从这个表中获取数据。

  1. 如果学生,班级对只出现一次,就应该出现。
  2. 如果两行有相同的学生和班级,则应该出现一行。
  3. 如果两个学生的名字相同,但是一个班级是西班牙语,则只返回一行,并且应该丢弃带有“西班牙语”的行。
  4. 如果两行具有相同的学生但是不同的类,并且它们都不是“西班牙语”,那么这两行应该显示。
  5. 如果涵盖所有要点,则以下内容应在最终查询中:

    Jake        English (covers point 1)
    Jon w.      Algebra (covers point 2)
    Scott       Korean (covers point 3)
    Anderson    Chemistry (covers point 4)
    Anderson    Psychology (covers point 4)
    

    通过以下查询,我认为我已经覆盖了所有基础,但看起来它不会涵盖第4点。

    SELECT DISTINCT student, classes FROM student_classes
      WHERE classes <> 'Spanish'
      GROUP BY Student;
    

    我试图采取我所遇到的更大问题的一个子集。

    有人可以指导我提出一个包含所有4个点的查询吗?

    我无法更改我的数据库设计。

2 个答案:

答案 0 :(得分:1)

如果您删除GROUP BY

,我认为您应该获得所需的结果
SELECT DISTINCT student,
                classes
FROM            student_classes
WHERE           classes <> 'Spanish'

DISTINCT负责第1,2和4点.WHERE子句负责第3点。

或者,您可以按两者进行分组:

SELECT DISTINCT student,
                classes
FROM            student_classes
WHERE           classes <> 'Spanish'
GROUP BY        student,
                classes

答案 1 :(得分:0)

试试这个:

SELECT DISTINCT student, classes FROM student_classes
WHERE classes <> 'Spanish';

虽然我建议您重新考虑使用学生的姓名作为关键字,而是使用数字ID /创建学生表,因为无法区分同一班级中同名学生...