碰到一个困难,暂时不说表结构设计的问题了。
想查询出员工所在的分公司名称。
员工表employee.deptment_id和部门表sys_deptment.`code`是关联的。
SELECT employee.`name` as 姓名,employee.deptment_id as 部门ID,sys_deptment.`name` as 部门名称,sys_deptment.`code` as 部门ID,
FROM employee ,sys_deptment
WHERE employee.deptment_id=sys_deptment.`code`上述这段语句只能查询出所在部门名称,但是我想改造下查询出所在分公司,达到图片所示的效果,请问有高人乐于出手相助吗?谢谢了。sys_deptment部门表是个机构树,3位数开头的是分公司,5位数开头的是部门。例如108是上海分公司,10811是上海分公司的下属部门,10814也是上海分公司的下属部门。MYSQL建表的语句如下。SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for employee
-- ----------------------------
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`deptment_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`) USING BTREE,
KEY `name` (`name`),
KEY `deptmentid` (`deptment_id`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of employee
-- ----------------------------
INSERT INTO `employee` VALUES ('1', '张三', '10814');
INSERT INTO `employee` VALUES ('2', '李四', '10815');
INSERT INTO `employee` VALUES ('3', '王五', '1081903');
INSERT INTO `employee` VALUES ('4', '赵六', '10925');
INSERT INTO `employee` VALUES ('5', '赵七', '10928');SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for sys_deptment
-- ----------------------------
DROP TABLE IF EXISTS `sys_deptment`;
CREATE TABLE `sys_deptment` (
`id` int(50) NOT NULL,
`code` varchar(40) DEFAULT NULL,
`name` varchar(400) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `inx_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of sys_deptment
-- ----------------------------
INSERT INTO `sys_deptment` VALUES ('1', '1', '总公司');
INSERT INTO `sys_deptment` VALUES ('194', '108', '上海分公司');
INSERT INTO `sys_deptment` VALUES ('195', '109', '杭州分公司');
INSERT INTO `sys_deptment` VALUES ('255', '10814', '人力资源部');
INSERT INTO `sys_deptment` VALUES ('256', '10815', '运营部');
INSERT INTO `sys_deptment` VALUES ('257', '10816', '行政部');
INSERT INTO `sys_deptment` VALUES ('258', '10819', '采供部');
INSERT INTO `sys_deptment` VALUES ('259', '10817', '质安部');
INSERT INTO `sys_deptment` VALUES ('260', '10818', '法务部');
INSERT INTO `sys_deptment` VALUES ('261', '1081901', '外协科');
INSERT INTO `sys_deptment` VALUES ('280', '10811', '商务部');
INSERT INTO `sys_deptment` VALUES ('308', '10929', '供应部');
INSERT INTO `sys_deptment` VALUES ('311', '10930', '人力资源部');
INSERT INTO `sys_deptment` VALUES ('312', '10931', '运营部');
INSERT INTO `sys_deptment` VALUES ('337', '10925', '外贸部');
INSERT INTO `sys_deptment` VALUES ('338', '10928', '安全部');
INSERT INTO `sys_deptment` VALUES ('380', '1081903', '计划科');
想查询出员工所在的分公司名称。
员工表employee.deptment_id和部门表sys_deptment.`code`是关联的。
SELECT employee.`name` as 姓名,employee.deptment_id as 部门ID,sys_deptment.`name` as 部门名称,sys_deptment.`code` as 部门ID,
FROM employee ,sys_deptment
WHERE employee.deptment_id=sys_deptment.`code`上述这段语句只能查询出所在部门名称,但是我想改造下查询出所在分公司,达到图片所示的效果,请问有高人乐于出手相助吗?谢谢了。sys_deptment部门表是个机构树,3位数开头的是分公司,5位数开头的是部门。例如108是上海分公司,10811是上海分公司的下属部门,10814也是上海分公司的下属部门。MYSQL建表的语句如下。SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for employee
-- ----------------------------
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`deptment_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`) USING BTREE,
KEY `name` (`name`),
KEY `deptmentid` (`deptment_id`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of employee
-- ----------------------------
INSERT INTO `employee` VALUES ('1', '张三', '10814');
INSERT INTO `employee` VALUES ('2', '李四', '10815');
INSERT INTO `employee` VALUES ('3', '王五', '1081903');
INSERT INTO `employee` VALUES ('4', '赵六', '10925');
INSERT INTO `employee` VALUES ('5', '赵七', '10928');SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for sys_deptment
-- ----------------------------
DROP TABLE IF EXISTS `sys_deptment`;
CREATE TABLE `sys_deptment` (
`id` int(50) NOT NULL,
`code` varchar(40) DEFAULT NULL,
`name` varchar(400) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `inx_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of sys_deptment
-- ----------------------------
INSERT INTO `sys_deptment` VALUES ('1', '1', '总公司');
INSERT INTO `sys_deptment` VALUES ('194', '108', '上海分公司');
INSERT INTO `sys_deptment` VALUES ('195', '109', '杭州分公司');
INSERT INTO `sys_deptment` VALUES ('255', '10814', '人力资源部');
INSERT INTO `sys_deptment` VALUES ('256', '10815', '运营部');
INSERT INTO `sys_deptment` VALUES ('257', '10816', '行政部');
INSERT INTO `sys_deptment` VALUES ('258', '10819', '采供部');
INSERT INTO `sys_deptment` VALUES ('259', '10817', '质安部');
INSERT INTO `sys_deptment` VALUES ('260', '10818', '法务部');
INSERT INTO `sys_deptment` VALUES ('261', '1081901', '外协科');
INSERT INTO `sys_deptment` VALUES ('280', '10811', '商务部');
INSERT INTO `sys_deptment` VALUES ('308', '10929', '供应部');
INSERT INTO `sys_deptment` VALUES ('311', '10930', '人力资源部');
INSERT INTO `sys_deptment` VALUES ('312', '10931', '运营部');
INSERT INTO `sys_deptment` VALUES ('337', '10925', '外贸部');
INSERT INTO `sys_deptment` VALUES ('338', '10928', '安全部');
INSERT INTO `sys_deptment` VALUES ('380', '1081903', '计划科');
这个至少把 分公司查出来了,你再加一下你自己的那些,应该可以吧
FUNCTION getChildLst(deptment_id varchar(300) CHARACTER SET utf8)
RETURNS varchar(1000) CHARSET utf8
BEGIN
DECLARE sTemp VARCHAR(2000);
DECLARE sTempChd VARCHAR(2000);
SET sTemp = '';
SET sTempChd = concat('',deptment_id);
WHILE sTempChd is not null DO
SET sTemp = concat(sTemp,',',sTempChd);
SELECT GROUP_CONCAT(deptment_id) INTO sTempChd from sys_deptment where locate(sTempChd,deptment_id+'') >0 ;
END WHILE;
RETURN right(sTemp, length(sTemp)-1);
END看看这样行不行,感觉应该需要改进一下(查询的数据可能会有重复)
在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。 但很多时候我们...