用EXCEPT對比兩個表的資料用還是UNION

2021-06-20 18:42:19 字數 1197 閱讀 1301

問題描述:

今天是新系統上線之後第一次跑資料,需要和老系統跑出來的表做對比。完全一樣則專案執行ok,新系統在時間上減少了人工干預,提高了80個百分點。先用老系統跑一次資料,匯入到乙個備份表。再用新系統跑一次,數量和備份表裡面的一樣。心裡坦蕩了一點。再比較裡面每一行資料是否一樣的時候,先是用了如下方式:

select

count(0) 

from 

select * from table_nm_bac

union

select * from table_nm

)  a

表table_nm_bac和表table_nm裡面的資料都是1萬條,結果上述query出來的結果是9千條。

環境:sql server 2008

解決方法:

因為想到不可能union出來的結果比每個表數量少,所以立馬用except的如下方式:

select

column_nm1,

column_nm2

...from

table_nm

except

select

column_nm1,

column_nm2

...from

table_nm_bac

go select

column_nm1,

column_nm2

...from

table_nm_bac

except

select

column_nm1,

column_nm2

...from

table_nm go

這樣兩個query出來的結果都是空的。我就放心了。後來用下面的query再檢查了一遍資料,結論出來了,是因為union把錶裡面自己的重複資料給除掉了:

select count(0) from(

select distinct * from table_nm) a

goselect

count(0)

from

(select * from table_nm

union

select * from table_nm)go

distinct後的資料和union自己後的資料是一樣一樣的。

結論:比對兩個表資料是否一致還是用except方式比較好, 因為兩個做union會把自己表裡面的重複資料也除掉。

兩個JSON對比

需求 兩個json對比 目前有兩個json 型別的資料,和 對比出來的結構需要有,2 3 4 5 class bo public bo string rowno,string name public string getrowno public void setrowno string rowno ...

兩個問題的對比

問題1 cf390c 給定若干行聊天記錄 發言人 話 有些聊天記錄的 發言人 是缺失的,已知相鄰對話發言人一定不同,且每個發言人說的話裡都不會包含自己的名字,現給定可能的發言人的集合,請填充每個對話的發言人.來自codeforces round 390 問題2 lc36 給定乙個9 9的矩陣,有些元...

兩個檔案對比 C

public static bool filecompare string file1,string file2 int file1byte 0 int file2byte 0 using filestream fs1 new filestream file1,filemode.open fs2 n...