mysql - 如何在mysql中使用WHERE IN进行内连接

标签 mysql

我有 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/

相关文章:

javascript - 将 bool 字符串查询传递给 Django

mysql - SQL 查询 - 左连接还是联合?

java - 发布到 self servlet 创建无限循环

php - select query 锁表,为什么会这样

php - 是否可以自行连接单个表?

mysql 查询返回相关行

php - 存储大量内容的建议方法是什么?

php - 使用 PDO 将 JSON 解码数据插入 mysql

php - 从 PHP 连接到 MySQL 数据库

php - 如何在一个网页上连接多个 MySQL 数据库?