【发布时间】:2017-02-24 16:02:55
【问题描述】:
我有一个存储考试记录的数据库:tbl_exams 存储考试的 ID 和名称 - 只有 9 项考试,因此该表中只有 9 条记录,因为考试是固定的,不会更改。 tbl_exam_details 存储考试条目的所有详细信息,并包括来自 tbl_exams 的相应 id - 这有一个外键约束。我要做的是创建一个查询,仅当某个学生参加了所有 9 次考试并且 pass_or_fail 字段为“1”时才返回行 - 我使用 tinyint(1) 存储通过的 1,或者0 表示失败)。这实际上是为了检查是否所有 9 门考试都已通过。
这是我到目前为止所拥有的,但是即使学生只完成了一两次考试,它也会返回行:
SELECT tbl_exam_details.student_id, exam_name, exam_date, pass_or_fail FROM tbl_exam_details
INNER JOIN tbl_exams ON tbl_exams.exam_id = tbl_exam_details.exam_id
WHERE student_id = 1 AND pass_or_fail = 1
AND tbl_exam_details.exam_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9)
ORDER BY exam_details_id
我需要的是查询只在所有 9 门考试都通过后才返回行。因此,如果学生通过了 8 次考试,则查询应返回 0 行。如果有人可以帮助我,将不胜感激。
【问题讨论】:
-
您能否编辑您的问题并提供示例数据和所需的结果?
-
您可以创建一个
all_exams列,该列将在修改表时自动更新。 all_exams = 1 如果设置了所有的exam_id,则为0。