根据不同的情况去查询不同关联表内容
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
查询效果: