[英]Oracle 11g: table checksum or hash
我想針對不同的視圖執行校驗和,以實現應該產生相同結果的不同方法(假設每個視圖不包含重復項,並且具有完全相同的列)。
問題
注意:在Google周圍搜索時,我發現了一些舊答案,例如這個 。
如果2個表相同,校驗和是在Oracle中進行比較的唯一方法嗎?
不,因為沒有重復項,所以可以使用MINUS
運算符:
SELECT * FROM Table1
MINUS
SELECT * FROM Table2
將返回所有來自行Table1
中不存在Table2
。 如果返回零行,則Table1
所有行也都存在於Table2
。
如果要在兩個方向上檢查表,則:
SELECT *
FROM (
SELECT t1.*, 'T1' AS "WHERE" FROM Table1 t1
MINUS
SELECT t2.*, 'T1' FROM Table2 t2
)
UNION ALL
(
SELECT t2.*, 'T2' FROM Table2 t2
MINUS
SELECT t1.*, 'T2' FROM Table1 t1
)
同樣,如果沒有返回行,則表是相同的。
如果您要比較具有重復項的表,並希望每個表中具有相同數量的重復行,則可以使用以下方法:
SELECT Col1, Col2, Col3, /*...*/ ColN,
ROW_NUMBER() OVER ( PARTITION BY Col1, Col2, Col3, /*...*/ ColN ORDER BY ROWNUM )
AS rn
FROM table1
MINUS
SELECT Col1, Col2, Col3, /*...*/ ColN,
ROW_NUMBER() OVER ( PARTITION BY Col1, Col2, Col3, /*...*/ ColN ORDER BY ROWNUM )
AS rn
FROM table2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.