我有 3 个表(科目、学生和考试),我加入这些表是为了根据分配给特定老师的类(class)获取学生成绩。
假设一位老师被分配了两个类(class)(S.S 2 和 S.S 3),并且从考试表中我只想根据分配给该老师的类(class)选择学生的成绩。
这是表结构
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 inner join 从 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')
最佳答案
要调试此:
- 删除连接,从选择中删除连接的行,并确认结果
- 添加一个联接,将其设为
左联接
,并确认结果 - 将
左连接
更改为内连接
并确认结果 - 对您的其他联接执行前 2 个步骤。
内部联接
最终可能会排除所有行,尤其是其中的 2 行。
关于mysql - 如何在mysql中使用WHERE IN进行内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54852144/