sql when case 根据不同 case 查询不同关联表信息

根据不同的情况去查询不同关联表内容
1.有三张表如下
1.1.学生表 student

CREATE TABLE `student` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `class_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `test`.`student` (`id`, `name`, `class_id`) VALUES ('1', 's1', '1');
INSERT INTO `test`.`student` (`id`, `name`, `class_id`) VALUES ('2', 's2', '2');

1.2.班级表1 class1

CREATE TABLE `class1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `test`.`class1` (`id`, `name`) VALUES ('1', '1班');

1.3.班级表2 class2

CREATE TABLE `class2` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `test`.`class2` (`id`, `name`) VALUES ('2', '2班');

1.4.班级表3 class3

CREATE TABLE `class3` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `test`.`class3` (`id`, `name`) VALUES ('3', '3班');

2.实现效果:根据学生的 class_id 不同去不同的表取他们的班级信息:比如学生的 class_id 为 1 则去 class1 取学生的班级信息,class_id 为 2 则去 class2 取班级信息

SELECT 
s.id,s.`name`,
case
s.class_id 
when 1 THEN c1.name
when 2 THEN c2.`name`
ELSE c3.name
END as className
FROM 
student s
LEFT JOIN class1 c1 on s.class_id=c1.id
LEFT JOIN class2 c2 on s.class_id=c2.id
LEFT JOIN class3 c3 on s.class_id=c3.id

查询效果:

sql when case 根据不同 case 查询不同关联表信息_第1张图片

你可能感兴趣的:(sql when case 根据不同 case 查询不同关联表信息)