通過SQL查詢兩張表中不匹配的行
--建立測試資料
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。
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部落格 ” ,連結:http://blog.itpub.net/26506993/viewspace-1994635/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Yii1.1中通過Sql查詢進行的分頁操作SQL
- 通過shell指令碼生成查詢表資料的sql指令碼SQL
- sql查詢一張表的重複資料SQL
- SQL 兩個表組合查詢SQL
- 兩表關聯查詢:sql、mybatisSQLMyBatis
- 通過spid,查詢執行慢的sql指令碼SQL指令碼
- 同一張表的兩個欄位比較查詢
- 通過SQL查詢UDUMP檔案SQL
- 【小山】sql server通過查詢系統表得到縱向的表結構SQLServer
- SQL語句將查詢結果插入到另一張表中SQL
- 如何通過OEM 中Lock 資訊中的特殊行號查詢lock行
- 查詢多張表記錄數的儲存過程儲存過程
- 通過shell和sql結合查詢效能sqlSQL
- 通過等待事件來獲得查詢SQl的執行計劃事件SQL
- 如何通過程式來查詢表名
- 查詢表中的連結行
- 查詢SQLSERVER執行過的SQL記錄SQLServer
- 通過SQL Server對上傳檔案內容進行查詢SQLServer
- 如何通過OEM中的Lock資訊查詢Lock哪一行
- mysql三張表關聯查詢MySql
- 通過linux程式號(pid)查詢Oracle的session中都執行那些sqlLinuxOracleSessionSQL
- SQL Server查詢最佳化中的兩個選項SQLServer
- 【SQL】根據兩列資訊,整合兩張表資料SQL
- 通過rowid查詢行所在的block,FILE OBJECTBloCObject
- 查詢mysql某張表中的所有資料(欄位)型別MySql型別
- Oracle中把一個查詢結果插入到一張表中Oracle
- 透過shell指令碼生成查詢表資料的sql指令碼SQL
- Oracle中對兩個資料表交集的查詢(轉)Oracle
- 查詢Oracle正在執行和執行過的SQL語句OracleSQL
- 使用SQL語句將資料庫中的兩個表合併成一張表SQL資料庫
- 通過外部表改進一個繁瑣的大查詢
- 查詢全表掃描的sqlSQL
- 文章主題: 在Oracle中查詢剛才執行過的SQL語句OracleSQL
- sql查詢過程表述SQL
- 透過查詢檢視sql執行計劃SQL
- GaussDB SQL查詢語句執行過程解析SQL
- SQL 查詢中的 NULL 值SQLNull
- SQL2005查詢表中欄位的描述SQL