我想对实现不同方法的不同视图做一个校验和,假设每个视图都没有重复,并且具有完全相同的列。(
问题
注意: 谷歌搜索我发现了一些旧的答案,如this one。
答案 0 :(得分:1)
如果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
同样,如果没有返回任何行,则表格相同。
如果您要将表与重复项进行比较,并希望每个表中的重复行数相同,那么您可以使用以下内容:
username