以学生信息表和学生消费卡表为例,先创建数据源:
CREATE TABLE `student_info` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`student_name` VARCHAR(10) DEFAULT NULL,
`class_no` VARCHAR(10) DEFAULT NULL,
`student_id` VARCHAR(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
CREATE TABLE `student_card` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`money` VARCHAR(10) DEFAULT NULL,
`student_id` VARCHAR(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
INSERT INTO student_info (student_name,class_no,student_id)
VALUES
('张三','一班','1001'),
('李四','一班','1002'),
('钱七','二班','2001'),
('王八','二班','2002'),
('王八','一班','1003')
INSERT INTO student_card (money,student_id)
VALUES
('100','1001'),
('34','1002'),
('98','2001'),
('786','2002'),
('65','1003')
解决方案:
/*通过连接查询的方法,用student_id关联两张表查询。*/
SELECT * FROM student_card a INNER JOIN student_info b ON a.student_id=b.student_id
/*不通过连接查询的方法,用student_id关联两张表查询。*/
SELECT a.student_id,MAX(a.money)money,MAX(a.student_name),MAX(a.class_no) FROM (
SELECT student_id,money,NULL student_name,NULL class_no FROM student_card
UNION ALL
SELECT student_id,NULL,student_name,class_no FROM student_info
) a GROUP BY a.student_id