問題:
已知兩張表ta、tb,這兩張表的表結構完全相同。現在有這樣的要求,ta是根據要求按一定頻率抽取的資料,tb是儲存發生變化的表。每次抽取ta表,都會比較ta、tb表,看這兩個表中是否存在完全一樣的資料項值。
例子:ta、tb的主鍵是ca1,則使用ta和tb表中的其他字段值比較(on ta.ca1=tb.ca1).eg
merge tb
using ta
on (ta.ca1=tb.ca1)
when matched then
...(比較其他字段是否相同,存在不同的記錄更新記錄)
when not matched then
...(插入新的記錄)
分析:當比較其他字段是否相同時,存在這樣的幾種情況:
ta.ca2 tb.ca2 操作
null null 不執行
'a' null a覆蓋b
null 'a' 不執行
'a' 'a' 不執行
'b' 'a' a覆蓋b
解答:對於這種情況
我們可以使用兩個函式結合來操作
update set
ta.ca2 = tb.ca2,
ta.ca3 = tb.ca3,
ta.ca4 = tb.ca4,
ta.ca5 = tb.ca5
when
nvl2(ta.ca2,decode(ta.ca2,tb.ca2,0,1),0)+
nvl2(ta.ca3,decode(ta.ca3,tb.ca3,0,1),0)+
nvl2(ta.ca4,decode(ta.ca4,tb.ca4,0,1),0)+
nvl2(ta.ca5,decode(ta.ca5,tb.ca5,0,1),0)
>0;
這裡,如果存在任何乙個欄位不相同,則when處的nvl2就返回1,其結果是大於0的,當所有的值都相同或ta.cax是空時才為0.
這種思想非常好。
SQL兩張表如何關聯
比如 我有table1 和 table2 兩張表table1 id name 1 張三 男 2 李四 女 3 王五 男table2 比如 我有table1 和 table2 兩張表 table1 id name 1 張三 男 2 李四 女 3 王五 男 table2 id hobby lid 1 下...
比較兩張表的資料是否一致
兩張表的結構相同,要比較兩張表的資料是否一致 例如 a表中列有 id,name,age b表中列有 id,name,age select b.id from a,b where a.name b.name and a.age b.age 以上的sql語句可以查出a,b兩個表中的相同資料。下面的sql...
oracle中兩張表資料比較
資料庫 oracle 在某些情況下,我們會需要比較兩張表的資料是否一樣。假設有兩張表a與表b他的字段相同,但是當中的資料可能不同,而且有些欄位的資料還有可能為空 方法一 手動 把需要比較的兩張表的資料按照某種規則排序後匯出為xls,這裡我直接用pl sql developer匯出 然後用把xls檔案...