兩張表關聯比較記錄是否相同

2021-05-24 11:49:11 字數 1033 閱讀 5007

問題:

已知兩張表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檔案...