有兩個表,A 部門表,存盤部門ID 名稱 上級部門;B表 存盤部門員工表 ID 姓名 部門ID
現在我希望通過一條sql陳述句取得所有頂級部門下的員工(包含下級部門的員工)
頂級部門 張三
頂級部門 李四
頂級部門 王五
頂級部門 趙六
頂級部門 錢八
uj5u.com熱心網友回復:
樓主百度一下 oracle connect by prior會有你的結果。
uj5u.com熱心網友回復:
已經試過了,不行
uj5u.com熱心網友回復:
貼出測驗資料和預期結果。另外,也可以貼出你的陳述句,并說一下哪里不行。
uj5u.com熱心網友回復:
把A和B的建表陳述句貼出來,有insert陳述句最好。
我幫你寫下SQL。
uj5u.com熱心網友回復:
非常簡單的一個問題,采用向下遞回,三五行左右代碼就實作了。uj5u.com熱心網友回復:
--有兩個表,A 部門表,存盤部門ID 名稱 上級部門;B表 存盤部門員工表 ID 姓名 部門ID
--現在我希望通過一條sql陳述句取得所有頂級部門下的員工(包含下級部門的員工)
--drop table dept;
create table dept(
dept_id varchar(5),
up_id varchar(5),
misc varchar(20),
primary key (dept_id)
);
INSERT INTO DEPT (DEPT_ID, UP_ID, MISC) VALUES ('12', '-', '頂級部門2');
INSERT INTO DEPT (DEPT_ID, UP_ID, MISC) VALUES ('1', '-', '頂級部門');
INSERT INTO DEPT (DEPT_ID, UP_ID, MISC) VALUES ('01', '1', '部門1');
INSERT INTO DEPT (DEPT_ID, UP_ID, MISC) VALUES ('02', '1', '部門2');
INSERT INTO DEPT (DEPT_ID, UP_ID, MISC) VALUES ('003', '02', '部門3');
--drop table employ;
create table employ(
emp_id varchar(6),
name varchar(20),
dept_id varchar(5),
primary key(emp_id)
);
INSERT INTO EMPLOY (EMP_ID, NAME, DEPT_ID) VALUES ('00001', '錢八', '1');
INSERT INTO EMPLOY (EMP_ID, NAME, DEPT_ID) VALUES ('00002', '趙六', '01');
INSERT INTO EMPLOY (EMP_ID, NAME, DEPT_ID) VALUES ('00003', '王五', '02');
INSERT INTO EMPLOY (EMP_ID, NAME, DEPT_ID) VALUES ('00004', '李四', '02');
INSERT INTO EMPLOY (EMP_ID, NAME, DEPT_ID) VALUES ('00005', '張三', '003');
--查詢部門為1-頂級部門下的所有員工
with temp(emp_id,name,dept_id) as (
select e.emp_id,e.name,e.dept_id from employ e left join dept d on e.dept_id = d.dept_id where e.dept_id = '02'
union all
select d2.emp_id,d2.name,d2.dept_id from temp t,
( select emp_id,name,e.dept_id,d3.up_id from employ e,dept d3 where e.dept_id = d3.dept_id)d2 where t.dept_id = d2.up_id
)
select distinct(emp_id),name,dept_id from temp order by emp_id;
uj5u.com熱心網友回復:
上面條件寫錯了with temp(emp_id,name,dept_id) as (
select e.emp_id,e.name,e.dept_id from employ e left join dept d on e.dept_id = d.dept_id where e.dept_id = '1'
union all
select d2.emp_id,d2.name,d2.dept_id from temp t,
( select emp_id,name,e.dept_id,d3.up_id from employ e,dept d3 where e.dept_id = d3.dept_id)d2 where t.dept_id = d2.up_id
)
select distinct(emp_id),name,dept_id from temp order by emp_id;
uj5u.com熱心網友回復:
--1.創建測驗表
create table t1(depno varchar2(10), depname varchar2(100), pre_depno varchar2(10));
create table t2(empno varchar2(10), empname varchar2(100), depno varchar2(10));
--2.添加測驗陳述句
insert into t1 values('001', '頂級部門',null);
insert into t1 values('010', '部門1','001');
insert into t1 values('020', '部門2','001');
insert into t1 values('030', '部門3','020');
insert into t2 values(1,'趙六','010');
insert into t2 values(2,'李四','020');
insert into t2 values(3,'王五','020');
insert into t2 values(4,'張三','030');
insert into t2 values(5,'錢八','001');
commit;
--3.sql實作
select t1.depname,t2.empname
from t1, t2
where t1.depno = t2.depno
start with t1.pre_depno is null
connect by prior t1.depno = t1.pre_depno
uj5u.com熱心網友回復:
這個問題還是樹的問題轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/77964.html
標籤:基礎和管理
下一篇:oracle 去重操作
