起因
本人在写查询的时候遇到了如题所述的要求,多次尝试无果(纯菜),最后发现“sql不会写?那就疯狂联表+堆子查询”。如果有更好的写法,也请在评论区赐教
表信息如下
equipment表:存储设备的名称等信息。其实这个表在接下来的查询中的作用,仅仅只是通过eq_id和其它表进行关联,然后查询到设备名称
DROP TABLE IF EXISTS `equipment`;
CREATE TABLE `equipment` (
`eq_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '设备ID',
`eq_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '设备名称',
`purchase_time` date NULL DEFAULT NULL COMMENT '采购时间',
`service_life` int(11) NULL DEFAULT NULL COMMENT '预计使用寿命/年',
`supplier_id` int(11) NULL DEFAULT NULL COMMENT '供应商ID',
PRIMARY KEY (`eq_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
overhaul表:要求从这个表中查出最新的一条检修结果,并统计“检修结果”为“正常”(overhaul_reasult = 0)一共多少次
DROP TABLE IF EXISTS `overhaul`;
CREATE TABLE `overhaul` (
`overhaul_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NULL DEFAULT NULL COMMENT '员工ID',
`overhaul_time` date NULL DEFAULT NULL COMMENT '检修时间',
`overhaul_result` int(11) NULL DEFAULT NULL COMMENT '检修结果',
`eq_id` int(11) NULL DEFAULT NULL '设备ID',
PRIMARY KEY (`overhaul_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
risk_warning表
DROP TABLE IF EXISTS `risk_warning`;
CREATE TABLE `risk_warning` (
`risk_warning_id` int(11) NOT NULL AUTO_INCREMENT,
`eq_id` int(11) NULL DEFAULT NULL COMMENT '设备ID',
`is_risk_warning` int(11) NULL DEFAULT NULL COMMENT '设备是否存在风险',
PRIMARY KEY (`risk_warning_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;