--创建测试数据
create table employees_act as
select employee_id,first_name,last_name from hr.employees where employee_id in(102,105,112,118,119,205) order by employee_id;
create table employees_new as
select employee_id,first_name,last_name from hr.employees where employee_id in(101,105,112,171,201) order by employee_id;
SQL> select * from employees_new;
EMPLOYEE_ID FIRST_NAME LAST_NAME
----------- -------------------- -------------------------
101 Neena Kochhar
105 David Austin
112 Jose Manuel Urman
171 William Smith
201 Michael Hartstein
SQL> select * from employees_act;
EMPLOYEE_ID FIRST_NAME LAST_NAME
----------- -------------------- -------------------------
102 Lex De Haan
105 David Austin
112 Jose Manuel Urman
118 Guy Himuro
119 Karen Colmenares
205 Shelley Higgins
--查找两张表中不匹配的行
SQL> select employee_id,
2 first_name,
3 last_name,
4 count(act_emp_src) act_emp_row_cnt,
5 count(new_emp_src) new_emp_row_cnt
6 from (select ea.*, 1 act_emp_src, NULL new_emp_src
7 from employees_act ea
8 union all
9 select en.*, NULL act_emp_src, 1 new_emp_src from employees_new en)
10 group by employee_id, first_name, last_name
11 having count(act_emp_src) != count(new_emp_src);
EMPLOYEE_ID FIRST_NAME LAST_NAME ACT_EMP_ROW_CNT NEW_EMP_ROW_CNT
----------- -------------------- ------------------------- --------------- ---------------
101 Neena Kochhar 0 1
205 Shelley Higgins 1 0
102 Lex De Haan 1 0
171 William Smith 0 1
201 Michael Hartstein 0 1
118 Guy Himuro 1 0
119 Karen Colmenares 1 0
--上面的查询方法两个表中所有列进行分组,每行返回两个 COUNT 值,对这两个 COUNT 值进行比对。
--加上 NULL 构造一列,是因为在 Oracle 中, COUNT 函数对含有 NULL 的列会统计成 0。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26506993/viewspace-1994635/
,如需转载,请注明出处,否则将追究法律责任。