我尝试过的查询:
SELECT
e.emp_id,
e.emp_name,
e.hire_date,
e.job_name,
e.dep_id,
dpt_allotment.dpt_code AS 'New_Dept_id',
dpt_allotment.dpt_name AS 'New_Dept_name'
FROM
Employee e
LEFT JOIN
Department dpt_allotment ON e.dep_id = dpt_allotment.dpt_code
WHERE
e.dep_id IS NULL
UNION ALL SELECT
e.emp_id,
e.emp_name,
e.hire_date,
e.job_name,
e.dep_id,
NULL AS 'New_Dept_id',
NULL AS 'New_Dept_name'
FROM
Employee e
WHERE
e.dep_id IS NOT NULL
AND e.dep_id NOT IN (SELECT
dpt_code
FROM
Department);
我的输出:
68454 TUCKER 9/8/1991 SALESMAN NULL NULL NULL
68736 ADNRES 5/23/1997 CLERK NULL NULL NULL
69000 JULIUS 12/3/1991 CLERK NULL NULL NULL
69324 MARKER 1/23/1992 CLERK NULL NULL NULL
63679 SANDRINE 12/18/1990 CLERK 21001 NULL NULL
64989 ADELYN 2/20/1991 SALESMAN 21001 NULL NULL
65271 WADE 2/22/1991 SALESMAN 21001 NULL NULL
66564 MADDEN 9/28/1991 SALESMAN 21001 NULL NULL
预期输出:
68454 TUCKER 9/8/1991 SALESMAN NULL 22001 IT Internal2
68736 ADNRES 5/23/1997 CLERK NULL 22001 IT Internal2
69000 JULIUS 12/3/1991 CLERK NULL 22001 IT Internal2
69324 MARKER 1/23/1992 CLERK NULL 22001 IT Internal2
63679 SANDRINE 12/18/1990 CLERK 21001 NULL NULL
64989 ADELYN 2/20/1991 SALESMAN 21001 NULL NULL
65271 WADE 2/22/1991 SALESMAN 21001 NULL NULL
66564 MADDEN 9/28/1991 SALESMAN 21001 NULL NULL
基本上你需要第二个查询的相反操作。
新部门不在员工名单中,因为新部门尚未分配
SELECT
e.emp_id,
e.emp_name,
e.hire_date,
e.job_name,
e.dep_id,
dpt_allotment.dpt_code AS 'New_Dept_id',
dpt_allotment.dpt_name AS 'New_Dept_name'
FROM
Employee e
CROSS JOIN
( SELECT dpt_code,dpt_name FROM Department WHERE dpt_code NOT IN (SELECT
dep_id
FROM
Employee)) dpt_allotment
WHERE
e.dep_id IS NULL
UNION ALL SELECT
e.emp_id,
e.emp_name,
e.hire_date,
e.job_name,
e.dep_id,
NULL AS 'New_Dept_id',
NULL AS 'New_Dept_name'
FROM
Employee e
WHERE
e.dep_id IS NOT NULL
AND e.dep_id NOT IN (SELECT
dpt_code
FROM
Department);
第一个答案:
select
e.emp_id, e.emp_name, e.hire_date, e.job_name, e.dep_id, dpt_code as 'New Dept_id', dpt_name as 'New Dept_name'
from employee e
join (
SELECT dpt_code,dpt_name FROM department order by dpt_code desc limit 1
) d
where e.dep_id IS NULL
UNION
select
e.emp_id, e.emp_name, e.hire_date, e.job_name, e.dep_id, NULL as 'New Dept_id', NULL as 'New Dept_name'
from employee e
where e.dep_id IS NOT NULL
and e.dep_id NOT IN (SELECT dpt_code FROM department);
第二个答案:
select
e.emp_id, e.emp_name, e.hire_date, e.job_name, e.dep_id, dpt_code as 'New Dept_id', dpt_name as 'New Dept_name'
from department d, employee e
WHERE dpt_code NOT IN (SELECT dep_id FROM employee where dep_id IS NOT NULL)
and e.dep_id IS NULL
UNION ALL
select
e.emp_id, e.emp_name, e.hire_date, e.job_name, e.dep_id, NULL as 'New Dept_id', NULL as 'New Dept_name'
from employee e
where e.dep_id IS NOT NULL
and e.dep_id NOT IN (SELECT dpt_code FROM department);