我有一个存储考试记录的数据库: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行。如果有人能帮助我,我们将不胜感激。
答案 0 :(得分:2)
SELECT ted.student_id,
exam_name,
exam_date,
pass_or_fail
FROM tbl_exam_details ted
INNER JOIN tbl_exams
ON tbl_exams.exam_id = ted.exam_id
WHERE student_id = 1
AND (SELECT COUNT(*)
FROM tbl_exam_details ted2
WHERE ted2.pass_or_fail = 1
AND ted2.student_id = ted.student_id
) = 9 -- mean this student pass 9 exams
ORDER BY exam_details_id
答案 1 :(得分:1)
这是你想要的吗?
SELECT ed.student_id
FROM tbl_exam_details ed
WHERE ed.student_id = 1 AND ed.pass_or_fail = 1 AND
ed.exam_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9)
GROUP BY ed.student_id
HAVING COUNT(*) = 9; -- or maybe COUNT(DISTINCT exam_id) = 9
这将返回已通过9项考试的学生ID。它不包含任何其他信息。
答案 2 :(得分:0)
您可以group_concat获取完整列表...
#first {
border: 1px solid red;
}
#second {
border: 1px solid green;
}