MySql層級樹查詢

DROP TABLE IF EXISTS `employees`;
CREATE TABLE `employees` (
  `employee_id` int(11) NOT NULL,
  `FIRST_NAME` varchar(20) DEFAULT NULL,
  `LAST_NAME` varchar(25) DEFAULT NULL,
  `EMAIL` varchar(25) DEFAULT NULL,
  `PHONE_NUMBER` varchar(20) DEFAULT NULL,
  `HIRE_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `JOB_ID` varchar(10) DEFAULT NULL,
  `SALARY` int(11) DEFAULT NULL,
  `commission_pct` float DEFAULT NULL,
  `manager_id` int(11) DEFAULT NULL,
  `department_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`employee_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;




INSERT INTO `employees` VALUES (100,'Steven','King','SKING','515.123.4567','2015-12-02 03:21:38','AD_PRES',24000,NULL,NULL,90);
INSERT INTO `employees` VALUES (101,'Neena','Kochhar','NKOCHHAR','515.123.4568','2015-12-02 03:21:38','AD_VP',17000,NULL,100,90);
INSERT INTO `employees` VALUES (102,'Lex','De Haan','LDEHAAN','515.123.4569','2015-12-02 03:21:38','AD_VP',17000,NULL,100,90);
INSERT INTO `employees` VALUES (103,'Alexander','Hunold','AHUNOLD','590.423.4567','2015-12-02 03:21:38','IT_PROG',9000,NULL,102,60);
INSERT INTO `employees` VALUES (104,'Bruce','Ernst','BERNST','590.423.4568','2015-12-02 03:21:38','IT_PROG',6000,NULL,103,60);
INSERT INTO `employees` VALUES (105,'David','Austin','DAUSTIN','590.423.4569','2015-12-02 03:21:38','IT_PROG',4800,NULL,103,60);
INSERT INTO `employees` VALUES (106,'Valli','Pataballa','VPATABAL','590.423.4560','2015-12-02 03:21:38','IT_PROG',4800,NULL,103,60);
INSERT INTO `employees` VALUES (107,'Diana','Lorentz','DLORENTZ','590.423.5567','2015-12-02 03:21:38','IT_PROG',4200,NULL,103,60);
INSERT INTO `employees` VALUES (108,'Nancy','Greenberg','NGREENBE','515.124.4569','2015-12-02 03:21:38','FI_MGR',12008,NULL,101,100);
INSERT INTO `employees` VALUES (109,'Daniel','Faviet','DFAVIET','515.124.4169','2015-12-02 03:21:38','FI_ACCOUNT',9000,NULL,108,100);
INSERT INTO `employees` VALUES (110,'John','Chen','JCHEN','515.124.4269','2015-12-02 03:21:38','FI_ACCOUNT',8200,NULL,108,100);
INSERT INTO `employees` VALUES (111,'Ismael','Sciarra','ISCIARRA','515.124.4369','2015-12-02 03:21:38','FI_ACCOUNT',7700,NULL,108,100);
INSERT INTO `employees` VALUES (112,'Jose Manuel','Urman','JMURMAN','515.124.4469','2015-12-02 03:21:38','FI_ACCOUNT',7800,NULL,108,100);
INSERT INTO `employees` VALUES (113,'Luis','Popp','LPOPP','515.124.4567','2015-12-02 03:21:38','FI_ACCOUNT',6900,NULL,108,100);
INSERT INTO `employees` VALUES (114,'Den','Raphaely','DRAPHEAL','515.127.4561','2015-12-02 03:21:38','PU_MAN',11000,NULL,100,30);
INSERT INTO `employees` VALUES (115,'Alexander','Khoo','AKHOO','515.127.4562','2015-12-02 03:21:38','PU_CLERK',3100,NULL,114,30);
INSERT INTO `employees` VALUES (116,'Shelli','Baida','SBAIDA','515.127.4563','2015-12-02 03:21:38','PU_CLERK',2900,NULL,114,30);
INSERT INTO `employees` VALUES (117,'Sigal','Tobias','STOBIAS','515.127.4564','2015-12-02 03:21:38','PU_CLERK',2800,NULL,114,30);
INSERT INTO `employees` VALUES (118,'Guy','Himuro','GHIMURO','515.127.4565','2015-12-02 03:21:38','PU_CLERK',2600,NULL,114,30);
INSERT INTO `employees` VALUES (119,'Karen','Colmenares','KCOLMENA','515.127.4566','2015-12-02 03:21:38','PU_CLERK',2500,NULL,114,30);
INSERT INTO `employees` VALUES (120,'Matthew','Weiss','MWEISS','650.123.1234','2015-12-02 03:21:38','ST_MAN',8000,NULL,100,50);
INSERT INTO `employees` VALUES (121,'Adam','Fripp','AFRIPP','650.123.2234','2015-12-02 03:21:38','ST_MAN',8200,NULL,100,50);
INSERT INTO `employees` VALUES (122,'Payam','Kaufling','PKAUFLIN','650.123.3234','2015-12-02 03:21:38','ST_MAN',7900,NULL,100,50);
INSERT INTO `employees` VALUES (123,'Shanta','Vollman','SVOLLMAN','650.123.4234','2015-12-02 03:21:38','ST_MAN',6500,NULL,100,50);
INSERT INTO `employees` VALUES (124,'Kevin','Mourgos','KMOURGOS','650.123.5234','2015-12-02 03:21:38','ST_MAN',5800,NULL,100,50);
INSERT INTO `employees` VALUES (125,'Julia','Nayer','JNAYER','650.124.1214','2015-12-02 03:21:38','ST_CLERK',3200,NULL,120,50);
INSERT INTO `employees` VALUES (126,'Irene','Mikkilineni','IMIKKILI','650.124.1224','2015-12-02 03:21:38','ST_CLERK',2700,NULL,120,50);
INSERT INTO `employees` VALUES (127,'James','Landry','JLANDRY','650.124.1334','2015-12-02 03:21:38','ST_CLERK',2400,NULL,120,50);
INSERT INTO `employees` VALUES (128,'Steven','Markle','SMARKLE','650.124.1434','2015-12-02 03:21:38','ST_CLERK',2200,NULL,120,50);
INSERT INTO `employees` VALUES (129,'Laura','Bissot','LBISSOT','650.124.5234','2015-12-02 03:21:38','ST_CLERK',3300,NULL,121,50);
INSERT INTO `employees` VALUES (130,'Mozhe','Atkinson','MATKINSO','650.124.6234','2015-12-02 03:21:38','ST_CLERK',2800,NULL,121,50);
INSERT INTO `employees` VALUES (131,'James','Marlow','JAMRLOW','650.124.7234','2015-12-02 03:21:38','ST_CLERK',2500,NULL,121,50);
INSERT INTO `employees` VALUES (132,'TJ','Olson','TJOLSON','650.124.8234','2015-12-02 03:21:38','ST_CLERK',2100,NULL,121,50);
INSERT INTO `employees` VALUES (133,'Jason','Mallin','JMALLIN','650.127.1934','2015-12-02 03:21:38','ST_CLERK',3300,NULL,122,50);
INSERT INTO `employees` VALUES (134,'Michael','Rogers','MROGERS','650.127.1834','2015-12-02 03:21:38','ST_CLERK',2900,NULL,122,50);
INSERT INTO `employees` VALUES (135,'Ki','Gee','KGEE','650.127.1734','2015-12-02 03:21:38','ST_CLERK',2400,NULL,122,50);
INSERT INTO `employees` VALUES (136,'Hazel','Philtanker','HPHILTAN','650.127.1634','2015-12-02 03:21:38','ST_CLERK',2200,NULL,122,50);
INSERT INTO `employees` VALUES (137,'Renske','Ladwig','RLADWIG','650.121.1234','2015-12-02 03:21:38','ST_CLERK',3600,NULL,123,50);
INSERT INTO `employees` VALUES (138,'Stephen','Stiles','SSTILES','650.121.2034','2015-12-02 03:21:38','ST_CLERK',3200,NULL,123,50);
INSERT INTO `employees` VALUES (139,'John','Seo','JSEO','650.121.2019','2015-12-02 03:21:38','ST_CLERK',2700,NULL,123,50);
INSERT INTO `employees` VALUES (140,'Joshua','Patel','JPATEL','650.121.1834','2015-12-02 03:21:38','ST_CLERK',2500,NULL,123,50);
INSERT INTO `employees` VALUES (141,'Trenna','Rajs','TRAJS','650.121.8009','2015-12-02 03:21:38','ST_CLERK',3500,NULL,124,50);
INSERT INTO `employees` VALUES (142,'Curtis','Davies','CDAVIES','650.121.2994','2015-12-02 03:21:38','ST_CLERK',3100,NULL,124,50);
INSERT INTO `employees` VALUES (143,'Randall','Matos','RMATOS','650.121.2874','2015-12-02 03:21:38','ST_CLERK',2600,NULL,124,50);
INSERT INTO `employees` VALUES (144,'Peter','Vargas','PVARGAS','650.121.2004','2015-12-02 03:21:38','ST_CLERK',2500,NULL,124,50);
INSERT INTO `employees` VALUES (145,'John','Russell','JRUSSEL','011.44.1344.429268','2004-09-30 16:00:00','SA_MAN',14000,0.4,100,80);
INSERT INTO `employees` VALUES (146,'Karen','Partners','KPARTNER','011.44.1344.467268','2005-01-04 16:00:00','SA_MAN',13500,0.3,100,80);
INSERT INTO `employees` VALUES (147,'Alberto','Errazuriz','AERRAZUR','011.44.1344.429278','2005-03-09 16:00:00','SA_MAN',12000,0.3,100,80);
INSERT INTO `employees` VALUES (148,'Gerald','Cambrault','GCAMBRAU','011.44.1344.619268','2007-10-14 16:00:00','SA_MAN',11000,0.3,100,80);
INSERT INTO `employees` VALUES (149,'Eleni','Zlotkey','EZLOTKEY','011.44.1344.429018','2008-01-28 16:00:00','SA_MAN',10500,0.2,100,80);
INSERT INTO `employees` VALUES (150,'Peter','Tucker','PTUCKER','011.44.1344.129268','2005-01-29 16:00:00','SA_REP',10000,0.3,145,80);
INSERT INTO `employees` VALUES (151,'David','Bernstein','DBERNSTE','011.44.1344.345268','2005-03-23 16:00:00','SA_REP',9500,0.25,145,80);
INSERT INTO `employees` VALUES (152,'Peter','Hall','PHALL','011.44.1344.478968','2005-08-19 16:00:00','SA_REP',9000,0.25,145,80);
INSERT INTO `employees` VALUES (153,'Christopher','Olsen','COLSEN','011.44.1344.498718','2006-03-29 16:00:00','SA_REP',8000,0.2,145,80);
INSERT INTO `employees` VALUES (154,'Nanette','Cambrault','NCAMBRAU','011.44.1344.987668','2006-12-08 16:00:00','SA_REP',7500,0.2,145,80);
INSERT INTO `employees` VALUES (155,'Oliver','Tuvault','OTUVAULT','011.44.1344.486508','2007-11-22 16:00:00','SA_REP',7000,0.15,145,80);
INSERT INTO `employees` VALUES (156,'Janette','King','JKING','011.44.1345.429268','2004-01-29 16:00:00','SA_REP',10000,0.35,146,80);
INSERT INTO `employees` VALUES (157,'Patrick','Sully','PSULLY','011.44.1345.929268','2004-03-03 16:00:00','SA_REP',9500,0.35,146,80);
INSERT INTO `employees` VALUES (158,'Allan','McEwen','AMCEWEN','011.44.1345.829268','2004-07-31 16:00:00','SA_REP',9000,0.35,146,80);
INSERT INTO `employees` VALUES (159,'Lindsey','Smith','LSMITH','011.44.1345.729268','2005-03-09 16:00:00','SA_REP',8000,0.3,146,80);
INSERT INTO `employees` VALUES (160,'Louise','Doran','LDORAN','011.44.1345.629268','2005-12-14 16:00:00','SA_REP',7500,0.3,146,80);
INSERT INTO `employees` VALUES (161,'Sarath','Sewall','SSEWALL','011.44.1345.529268','2006-11-02 16:00:00','SA_REP',7000,0.25,146,80);
INSERT INTO `employees` VALUES (162,'Clara','Vishney','CVISHNEY','011.44.1346.129268','2005-11-10 16:00:00','SA_REP',10500,0.25,147,80);
INSERT INTO `employees` VALUES (163,'Danielle','Greene','DGREENE','011.44.1346.229268','2007-03-18 16:00:00','SA_REP',9500,0.15,147,80);
INSERT INTO `employees` VALUES (164,'Mattea','Marvins','MMARVINS','011.44.1346.329268','2008-01-23 16:00:00','SA_REP',7200,0.1,147,80);
INSERT INTO `employees` VALUES (165,'David','Lee','DLEE','011.44.1346.529268','2008-02-22 16:00:00','SA_REP',6800,0.1,147,80);
INSERT INTO `employees` VALUES (166,'Sundar','Ande','SANDE','011.44.1346.629268','2008-03-23 16:00:00','SA_REP',6400,0.1,147,80);
INSERT INTO `employees` VALUES (167,'Amit','Banda','ABANDA','011.44.1346.729268','2008-04-20 16:00:00','SA_REP',6200,0.1,147,80);
INSERT INTO `employees` VALUES (168,'Lisa','Ozer','LOZER','011.44.1343.929268','2005-03-10 16:00:00','SA_REP',11500,0.25,148,80);
INSERT INTO `employees` VALUES (169,'Harrison','Bloom','HBLOOM','011.44.1343.829268','2006-03-22 16:00:00','SA_REP',10000,0.2,148,80);
INSERT INTO `employees` VALUES (170,'Tayler','Fox','TFOX','011.44.1343.729268','2006-01-23 16:00:00','SA_REP',9600,0.2,148,80);
INSERT INTO `employees` VALUES (171,'William','Smith','WSMITH','011.44.1343.629268','2007-02-22 16:00:00','SA_REP',7400,0.15,148,80);
INSERT INTO `employees` VALUES (172,'Elizabeth','Bates','EBATES','011.44.1343.529268','2007-03-23 16:00:00','SA_REP',7300,0.15,148,80);
INSERT INTO `employees` VALUES (173,'Sundita','Kumar','SKUMAR','011.44.1343.329268','2008-04-20 16:00:00','SA_REP',6100,0.1,148,80);
INSERT INTO `employees` VALUES (174,'Ellen','Abel','EABEL','011.44.1644.429267','2004-05-10 16:00:00','SA_REP',11000,0.3,149,80);
INSERT INTO `employees` VALUES (175,'Alyssa','Hutton','AHUTTON','011.44.1644.429266','2005-03-18 16:00:00','SA_REP',8800,0.25,149,80);
INSERT INTO `employees` VALUES (176,'Jonathon','Taylor','JTAYLOR','011.44.1644.429265','2006-03-23 16:00:00','SA_REP',8600,0.2,149,80);
INSERT INTO `employees` VALUES (177,'Jack','Livingston','JLIVINGS','011.44.1644.429264','2006-04-22 16:00:00','SA_REP',8400,0.2,149,80);
INSERT INTO `employees` VALUES (178,'Kimberely','Grant','KGRANT','011.44.1644.429263','2015-12-02 03:22:27','SA_REP',7000,0.15,149,NULL);
INSERT INTO `employees` VALUES (179,'Charles','Johnson','CJOHNSON','011.44.1644.429262','2008-01-03 16:00:00','SA_REP',6200,0.1,149,80);
INSERT INTO `employees` VALUES (180,'Winston','Taylor','WTAYLOR','650.507.9876','2015-12-02 03:21:38','SH_CLERK',3200,NULL,120,50);
INSERT INTO `employees` VALUES (181,'Jean','Fleaur','JFLEAUR','650.507.9877','2015-12-02 03:21:38','SH_CLERK',3100,NULL,120,50);
INSERT INTO `employees` VALUES (182,'Martha','Sullivan','MSULLIVA','650.507.9878','2015-12-02 03:21:38','SH_CLERK',2500,NULL,120,50);
INSERT INTO `employees` VALUES (183,'Girard','Geoni','GGEONI','650.507.9879','2015-12-02 03:21:38','SH_CLERK',2800,NULL,120,50);
INSERT INTO `employees` VALUES (184,'Nandita','Sarchand','NSARCHAN','650.509.1876','2015-12-02 03:21:38','SH_CLERK',4200,NULL,121,50);
INSERT INTO `employees` VALUES (185,'Alexis','Bull','ABULL','650.509.2876','2015-12-02 03:21:38','SH_CLERK',4100,NULL,121,50);
INSERT INTO `employees` VALUES (186,'Julia','Dellinger','JDELLING','650.509.3876','2015-12-02 03:21:38','SH_CLERK',3400,NULL,121,50);
INSERT INTO `employees` VALUES (187,'Anthony','Cabrio','ACABRIO','650.509.4876','2015-12-02 03:21:38','SH_CLERK',3000,NULL,121,50);
INSERT INTO `employees` VALUES (188,'Kelly','Chung','KCHUNG','650.505.1876','2015-12-02 03:21:38','SH_CLERK',3800,NULL,122,50);
INSERT INTO `employees` VALUES (189,'Jennifer','Dilly','JDILLY','650.505.2876','2015-12-02 03:21:38','SH_CLERK',3600,NULL,122,50);
INSERT INTO `employees` VALUES (190,'Timothy','Gates','TGATES','650.505.3876','2015-12-02 03:21:38','SH_CLERK',2900,NULL,122,50);
INSERT INTO `employees` VALUES (191,'Randall','Perkins','RPERKINS','650.505.4876','2015-12-02 03:21:38','SH_CLERK',2500,NULL,122,50);
INSERT INTO `employees` VALUES (192,'Sarah','Bell','SBELL','650.501.1876','2015-12-02 03:21:38','SH_CLERK',4000,NULL,123,50);
INSERT INTO `employees` VALUES (193,'Britney','Everett','BEVERETT','650.501.2876','2015-12-02 03:21:38','SH_CLERK',3900,NULL,123,50);
INSERT INTO `employees` VALUES (194,'Samuel','McCain','SMCCAIN','650.501.3876','2015-12-02 03:21:38','SH_CLERK',3200,NULL,123,50);
INSERT INTO `employees` VALUES (195,'Vance','Jones','VJONES','650.501.4876','2015-12-02 03:21:38','SH_CLERK',2800,NULL,123,50);
INSERT INTO `employees` VALUES (196,'Alana','Walsh','AWALSH','650.507.9811','2015-12-02 03:21:38','SH_CLERK',3100,NULL,124,50);
INSERT INTO `employees` VALUES (197,'Kevin','Feeney','KFEENEY','650.507.9822','2015-12-02 03:21:38','SH_CLERK',3000,NULL,124,50);
INSERT INTO `employees` VALUES (198,'Donald','OConnell','DOCONNEL','650.507.9833','2015-12-02 03:21:38','SH_CLERK',2600,NULL,124,50);
INSERT INTO `employees` VALUES (199,'Douglas','Grant','DGRANT','650.507.9844','2015-12-02 03:21:38','SH_CLERK',2600,NULL,124,50);
INSERT INTO `employees` VALUES (200,'Jennifer','Whalen','JWHALEN','515.123.4444','2015-12-02 03:21:38','AD_ASST',4400,NULL,101,10);
INSERT INTO `employees` VALUES (201,'Michael','Hartstein','MHARTSTE','515.123.5555','2015-12-02 03:21:38','MK_MAN',13000,NULL,100,20);
INSERT INTO `employees` VALUES (202,'Pat','Fay','PFAY','603.123.6666','2015-12-02 03:21:38','MK_REP',6000,NULL,201,20);
INSERT INTO `employees` VALUES (203,'Susan','Mavris','SMAVRIS','515.123.7777','2015-12-02 03:21:38','HR_REP',6500,NULL,101,40);
INSERT INTO `employees` VALUES (204,'Hermann','Baer','HBAER','515.123.8888','2015-12-02 03:21:38','PR_REP',10000,NULL,101,70);
INSERT INTO `employees` VALUES (205,'Shelley','Higgins','SHIGGINS','515.123.8080','2015-12-02 03:21:38','AC_MGR',12008,NULL,101,110);
INSERT INTO `employees` VALUES (206,'William','Gietz','WGIETZ','515.123.8181','2015-12-02 03:21:38','AC_ACCOUNT',8300,NULL,205,110);

1.指定一個僱員ID,查詢全部的上級. 查詢僱員ID爲144的全部上級
  首先(SELECT @currentId := 144,@level := 0) vars 制定僱員的id
  @currentId 將僱員id存爲_id, 在相關子查詢中,將_id代入查找該ID的上級ID,並修改@current_id. 最後過濾獲得結果.
	select
			@currentId as _id,
			(select @currentId:=manager_id from employees where employee_id=_id) as manager_id,
			@level:=@level+1 as level
	from 
	(select @currentId:=191,@level:=0) vars,
	employees
	where @currentId is not null;






效果等同於Oracle
	select employee_id,sys_connect_by_path(employee_id,'/') path 
	from employees 
	start with manager_id is null connect by manager_id=prior employee_id;


	select eid,group_concat(_id order by _id,lv desc SEPARATOR '/') from (  
			select   
					@gid:=@cgid,@cgid:=eid,  
					if(@gid=@cgid, @currentId,@currentId:=eid) as _id,       
					(select @currentId:=manager_id from employees where employee_id=_id) as manager_id,  
					if(@gid=@cgid, @level:=@level+1,@level:=0) as lv,  
					eid,employee_id  
			from   
			(select @currentId:=-1,@level:=0,@gid:=-1,@cgid:=-1) vars,  
			(select a.employee_id eid,b.employee_id from employees a,employees b order by a.employee_id) a  
	) c where _id is not null  
	group by eid   
	order by 2; 


show variables  like 'port';
相關文章
相關標籤/搜索