[英]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.