我有3个表,例如Student
,Subject
和Midterm
表。
Student
表包含
studid Firstname lastname Class
1 A R 12A
2 B S 12A
3 C T 12A
4 D U 12A
5 E V 12B
SUBJECT
表包含
subid subname
1 maths
2 science
3 english
MIDTERM
表包含
studid subid marks examdate
1 1 100 2014-09-24
1 2 92 2014-09-25
1 2 92 2014-09-26
2 1 74 2014-09-24
2 2 78 2014-09-26
2 3 73 2014-09-26
3 1 90 2014-09-24
3 2 84 2014-09-25
3 2 92 2014-09-25
5 1 87 2014-09-24
4 2 79 2014-09-24
4 3 90 2014-09-26
结果必须是:
Firstname LastName Subname
答案 0 :(得分:0)
根据以下评论并假设所有学生必须参加所有中期
select Firstname , lastname , subname
from (
select studid , FirstName, lastname , subID , subname
from student , Subject) d
left outer join midterm m on d.studid = m.studID and d.subid = m.subid
where m.examdate is null
可能在没有catesian连接的情况下编写它,但它应该足够了
答案 1 :(得分:0)
正如我猜测的那样,那个没有通过期中考试的人是#34;那个少于50分的人#34;。 如果没有,你可以在最后一行修复它。
您可以使用INNER JOIN
SQL关键字对几个逻辑上互连的表进行查询,以确定匹配条件。
简单地说,首先你需要了解如何在逻辑上提取数据
例如,在您的情况下,您需要从MIDTERM
表中进行选择,因为它会存储学生ID和主题ID。
用语言来说,听起来像是:
1.获取失败的中期的所有结果(中间标记<50)。每行包含studid
(未通过考试)和subid
(考试失败);
2.从表Student
中取出失败的学生的FirstName和LastName;
3.从表Subject
中取出已失败的主题的子名称;
4.返回这三个值。
在代码中,它看起来像:
SELECT s.Firstname, s.Lastname, subj.subname FROM `MIDTERM`
FROM `MIDTERM` as m
INNER JOIN `Student` as s ON s.stuid = m.studid
INNER JOIN `SUBJECT` as subj ON subj.subid = m.subid
WHERE `marks` < 50