我做的是两个表,一个表是科目签到了的信息表,一个表是所有人信息的表,现在希望通过这两个表的某条项目做限制来确定同一班级且同一科目考试的人员信息,从而知道这个班级的这场考试谁没有参加,需要输出的结果如表二所示,先谢谢大家了。一表建立DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info` (
  `userid` varchar(15) NOT NULL COMMENT '用户账号',
  `userpassword` varchar(20) NOT NULL COMMENT '用户密码',
  `username` varchar(15) NOT NULL COMMENT '用户姓名',
  `userclass` varchar(15) NOT NULL COMMENT '用户班级 教师所属院系',
  `userpower` int(11) NOT NULL COMMENT '用户权限1学生2教师',
  `userisin` int(1) NOT NULL DEFAULT '0' COMMENT '是否登入',
  PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;一表数据insert  into `user_info`(`userid`,`userpassword`,`username`,`userclass`,`userpower`,`userisin`) values 
('1','1','韩世宏','计算机科学与技术2班',2,0),
('2','2','刘美伶','计算机科学与技术2班',1,0),
('3','3','康鑫','计算机科学与技术2班',1,0),
('6','6','王磊','计算机科学与技术3班',1,0),
('7','7','郝光辉','计算机科学与技术3班',1,0),
('8','8','刘建','计算机科学与技术3班',1,0),
('9','9','TeacherW','数理学院',2,0);二表DROP TABLE IF EXISTS `student_signininfo`;
CREATE TABLE `student_signininfo` (
  `student_id` varchar(15) NOT NULL COMMENT '学生学号',
  `student_class` varchar(15) NOT NULL COMMENT '学生班级',
  `student_name` varchar(15) NOT NULL COMMENT '学生姓名',
  `test_kemu` varchar(15) NOT NULL COMMENT '考试科目',
  PRIMARY KEY (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;二表数据insert  into `student_signininfo`(`student_id`,`student_class`,`student_name`,`test_kemu`) values 
('1','计算机科学与技术2班','韩世宏','中国历史'),
('2','计算机科学与技术2班','刘美伶','中国历史');
('2','计算机科学与技术2班','刘美伶','JAVA');现在想实现的是只有二表出现的 科目和班级 来确定这个班剩下的人的信息,除了二表出现的人名 剩下的其他人的信息同时结果集新加一条test_kemu
一表的数据是
('1','1','韩世宏','计算机科学与技术2班',2,0),
('2','2','刘美伶','计算机科学与技术2班',1,0),
('3','3','康鑫','计算机科学与技术2班',1,0),
('6','6','王磊','计算机科学与技术3班',1,0),
('7','7','郝光辉','计算机科学与技术3班',1,0),
('8','8','刘建','计算机科学与技术3班',1,0),
('9','9','TeacherW','数理学院',2,0);
二表数据
('1','计算机科学与技术2班','韩世宏','中国历史'),
('2','计算机科学与技术2班','刘美伶','中国历史');
('2','计算机科学与技术2班','刘美伶','JAVA');
希望的结果如下
如果限制条件是想知道‘中国历史’谁没有参加显示如下
('3','计算机科学与技术2班','康鑫','中国历史'),
如果限制条件是想知道‘JAVA’谁没有参加显示如下
('1','计算机科学与技术2班','韩世宏','JAVA'),
('3','计算机科学与技术2班','康鑫','JAVA'),
其他班级同理

解决方案 »

  1.   

    select 子查询 使用not in
      

  2.   

    3L能不能给个具体的sql语句呢?
      

  3.   

    Quote: 引用 3 楼 y5_set 的回复:

    select 子查询 使用not in[/
    3L能不能给个具体的sql语句呢?quote]
      

  4.   

    mysql> select * from `user_info`;
    +--------+--------------+----------+---------------------+-----------+----------+
    | userid | userpassword | username | userclass           | userpower | userisin |
    +--------+--------------+----------+---------------------+-----------+----------+
    | 1      | 1            | 韩世宏   | 计算机科学与技术2班 |         2 |        0 |
    | 2      | 2            | 刘美伶   | 计算机科学与技术2班 |         1 |        0 |
    | 3      | 3            | 康鑫     | 计算机科学与技术2班 |         1 |        0 |
    | 6      | 6            | 王磊     | 计算机科学与技术3班 |         1 |        0 |
    | 7      | 7            | 郝光辉   | 计算机科学与技术3班 |         1 |        0 |
    | 8      | 8            | 刘建     | 计算机科学与技术3班 |         1 |        0 |
    | 9      | 9            | TeacherW | 数理学院            |         2 |        0 |
    +--------+--------------+----------+---------------------+-----------+----------+
    7 rows in set (0.00 sec)mysql> select * from `student_signininfo`;
    +------------+---------------------+--------------+-----------+
    | student_id | student_class       | student_name | test_kemu |
    +------------+---------------------+--------------+-----------+
    | 1          | 计算机科学与技术2班 | 韩世宏       | 中国历史  |
    | 2          | 计算机科学与技术2班 | 刘美伶       | JAVA      |
    | 2          | 计算机科学与技术2班 | 刘美伶       | 中国历史  |
    +------------+---------------------+--------------+-----------+
    3 rows in set (0.00 sec)mysql>mysql> -- ‘中国历史’谁没有参加
    mysql> select *
        -> from user_info
        -> where not exists (select 1 from student_signininfo where student_id=user_info.userid and test_kemu='中国历史');
    +--------+--------------+----------+---------------------+-----------+----------+
    | userid | userpassword | username | userclass           | userpower | userisin |
    +--------+--------------+----------+---------------------+-----------+----------+
    | 3      | 3            | 康鑫     | 计算机科学与技术2班 |         1 |        0 |
    | 6      | 6            | 王磊     | 计算机科学与技术3班 |         1 |        0 |
    | 7      | 7            | 郝光辉   | 计算机科学与技术3班 |         1 |        0 |
    | 8      | 8            | 刘建     | 计算机科学与技术3班 |         1 |        0 |
    | 9      | 9            | TeacherW | 数理学院            |         2 |        0 |
    +--------+--------------+----------+---------------------+-----------+----------+
    5 rows in set (0.00 sec)mysql>
      

  5.   

    我的意思意思是说
    比如现在二表有了一列中国历史的值 而且这列值是计算机科学与技术2班的人做的 那我就想通过班级这一值来确定 只有这个计算机科学与技术2班的人 谁没有参加  而不是除了二表出现的剩下所有的一表信息
    我的意思您能懂吗
    能不能实现 麻烦您了 之前查到的帖子也是您回答的 我也试了 结果和您刚刚给我的结果一样  但是我需要的是以上结果,再麻烦您帮我出个sql把