Mysql -- 多表联合查询
| PYID | 姓名 |
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
| 定性 | |
| 一般 | |
| 严重 | |
| 规范 | |
| 建议 |
| RYID | 定性 -- DING |
| 1 | 一般 |
| 1 | 一般 |
| 1 | 规范 |
| 3 | 一般 |
| 3 | 规范 |
| 3 | 规范 |
| 姓名 | 一般 | 严重 | 规范 | 建议 |
| 张三 | 2 | 0 | 1 | 0 |
| 李四 | 0 | 0 | 0 | 0 |
| 王五 | 1 | 0 | 2 | 0 |
表一:table_01
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for biao_1 -- ---------------------------- DROP TABLE IF EXISTS `biao_1`; CREATE TABLE `biao_1` ( `RYID` int(11) NOT NULL, `NAME` varchar(255) DEFAULT NULL COMMENT '姓名' ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of biao_1 -- ---------------------------- INSERT INTO `biao_1` VALUES ('1', '张三'); INSERT INTO `biao_1` VALUES ('2', '李四'); INSERT INTO `biao_1` VALUES ('3', '王五');
表三:table_03
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for biao_3 -- ---------------------------- DROP TABLE IF EXISTS `biao_3`; CREATE TABLE `biao_3` ( `RYID` int(11) NOT NULL, `DING` varchar(255) DEFAULT NULL COMMENT '定性' ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of biao_3 -- ---------------------------- INSERT INTO `biao_3` VALUES ('1', '一般'); INSERT INTO `biao_3` VALUES ('1', '一般'); INSERT INTO `biao_3` VALUES ('1', '规范'); INSERT INTO `biao_3` VALUES ('3', '一般'); INSERT INTO `biao_3` VALUES ('3', '规范'); INSERT INTO `biao_3` VALUES ('3', '规范');
表1和表3的RYID是同一字段。 要根据表1.RYID,及表2.定性,统计表1.RYID+表2.定性=表3.RYID+表3.定性的数量。 如果表1.RYID+表2.定性在表面中没有查询结果则显示0.表1.RYID+表2.定性是笛卡尔积。 查询结果根据表1.RYID要显示姓名而不是RYID. 如何构建查询统计语句
SELECT a.RYID AS RYID, `NAME` AS 姓名, IFNULL(一般, 0) AS 一般, IFNULL(严重, 0) AS 严重, IFNULL(规范, 0) AS 规范, IFNULL(建议, 0) AS 建议 FROM biao_1 a LEFT JOIN ( SELECT RYID, sum(IF(DING = '一般', 1, 0)) AS 一般, sum(IF(DING = '严重', 1, 0)) AS 严重, sum(IF(DING = '规范', 1, 0)) AS 规范, sum(IF(DING = '建议', 1, 0)) AS 建议 FROM biao_3
GROUP BY RYID ) b ON a.RYID = b.RYID
浙公网安备 33010602011771号