Mysql -- 多表联合查询

表1  table_01
PYID 姓名
1 张三
2 李四
3 王五
表2
  定性
  一般
  严重
  规范
  建议
表3  table_03
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
posted @ 2018-04-21 15:06  liuweipcs  阅读(377)  评论(0)    收藏  举报