我要加入3个表(科目,学生和考试),以根据分配给特定老师的班级获取学生成绩。
假设一位老师被分配了两个班级(S.S 2和S.S 3),我只希望从考试表中根据分配给该老师的班级选择学生成绩。
这是表格结构
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`regiNo` varchar(100) NOT NULL,
`session` varchar(15) NOT NULL,
`class` varchar(50) NOT NULL,
`class_group` varchar(26) NOT NULL,
`firstName` varchar(60) NOT NULL,
`middleName` varchar(60) NOT NULL,
`lastName` varchar(60) NOT NULL
)
INSERT INTO `student` (`id`, `regiNo`, `session`, `class`, `class_group`, `firstName`, `middleName`, `lastName`) VALUES
(8, 'TS2018007', '2018', 'Primary One', 'Science', 'ADEWUYI', 'o', 'ODERINDE'),
(9, 'TS2018009', '2018', 'Primary One', 'N/A', 'Ayodele', 'Jumide', 'Boros')
CREATE TABLE `exam` (
`examid` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Roll_Number` varchar(30) NOT NULL,
`sub_id` varchar(20) NOT NULL,
`mid_term` varchar(5) NOT NULL DEFAULT '',
`count_assessment` varchar(4) NOT NULL DEFAULT '',
`scored` varchar(30) NOT NULL,
`total_score` varchar(4) NOT NULL DEFAULT '',
`sub_highest` varchar(4) NOT NULL DEFAULT '',
`sub_lowest` varchar(4) NOT NULL DEFAULT '',
`first_term` varchar(4) NOT NULL DEFAULT '',
`second_term` varchar(4) NOT NULL DEFAULT '',
`third_term` varchar(4) NOT NULL DEFAULT '',
`avg_score` varchar(4) NOT NULL DEFAULT '',
`internaltype` varchar(30) NOT NULL,
`Class` varchar(40) NOT NULL,
`Year` varchar(4) NOT NULL
)
INSERT INTO `exam` (`examid`, `Roll_Number`, `sub_id`, `mid_term`, `count_assessment`, `scored`, `total_score`, `sub_highest`, `sub_lowest`, `first_term`, `second_term`, `third_term`, `avg_score`, `internaltype`, `Class`, `Year`) VALUES
(32, 'TS2018007', 'Eng', '54', '20', '50', '134', '80', '70', '45', '12', '43', '45', 'First', 'J.S.S 3', '2019'),
(33, 'TS2018007', 'Agr', '32', '32', '12', '34', '56', '23', '34', '12', '56', '20', 'First', 'J.S.S 3', '2019'),
(34, 'TS2018007', 'math', '54', '20', '45', '12', '45', '34', '34', '12', '12', '23', 'First', 'J.S.S 3', '2019'),
(35, 'TS2018007', 'bio', '54', '27', '23', '23', '12', '12', '45', '55', '12', '45', 'First', 'J.S.S 2', '2019');
CREATE TABLE `subjects` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`subect_code` varchar(55) NOT NULL,
`subjects` varchar(255) NOT NULL
)
INSERT INTO `subjects` (`id`, `subect_code`, `subjects`) VALUES
(12, 'Eng', 'English Language'),
(13, 'Agr', 'Agricultural Science'),
(17, 'math', 'Mathematics'),
(20, 'bio', 'Biology'),
(21, 'fur', 'Further Maths'),
(25, 'che', 'Chemistry'),
(26, 'geo', 'Geography');
如何使用MySQL查询中的内部连接中的WHERE IN 从MySQL中选择数据? 下面的查询返回了空结果集:
SELECT distinct s.regiNo, s.firstName as fname, s.middleName as mname, s.lastName as lname, s.gender, s.class_group, c.subjects,
e.mid_term, e.count_assessment, e.examid, e.scored, e.internaltype, e.Class, e.Year,e.total_score,e.sub_highest,e.sub_lowest,e
.first_term,e.second_term,e.third_term,e.avg_score FROM student s inner join exam e on s.regiNo = e.Roll_Number
inner join subjects c on e.sub_id = c.subect_code WHERE e.Class IN('S.S 2', 'S.S 3')
答案 0 :(得分:0)
要调试此:
left join
,然后确认结果left join
更改为inner join
并确认结果 inner joins
可能最终排除所有行,尤其是其中2行。
答案 1 :(得分:0)
谢谢,伙计们。我发现我是犯错误的人。我的IN子句中指定的值与表行中的任何值都不匹配,这就是它返回空值的原因。
SELECT DISTINCT s.regiNo,
s.firstName as fname,
s.middleName as mname,
s.lastName as lname,
s.gender,
s.class_group,
c.subjects,
e.mid_term,
e.count_assessment,
e.examid,
e.scored,
e.internaltype,
e.Class,
e.Year,
e.total_score,
e.sub_highest,
e.sub_lowest,
e .first_term,
e.second_term,
e.third_term,
e.avg_score
FROM student s
INNER JOIN exam e
ON s.regiNo = e.Roll_Number
INNER JOIN subjects c ON
e.sub_id = c.subect_code
WHERE e.Class IN('J.S.S 3','J.S.S 2')
GROUP BY
s.regiNo,
s.firstName,
s.middleName,
s.lastName,
s.gender,
s.class_group,
c.subjects,
e.mid_term,
e.count_assessment,
e.examid,
e.scored,
e.internaltype,
e.Class,
e.Year,
e.total_score,
e.sub_highest,
e.sub_lowest,
e.first_term,
e.second_term,
e.third_term,
e.avg_score