我有两个Oracle数据库模式,每个模式都有以下两个表:
1)表T1包含列:child_id,parent_id,类型
2)表T2包含列:id,属性,值
如何比较存储在这两种模式中的数据并找出任何不匹配(以最佳方式)?数据可以是这样的:
T1:
1, NULL, 'Fruit'
2, 1, 'Orange'
3, 1, 'Apple'
4, 3, 'Gala'
T2:
1, 'Company Name', 'ABC'
1, 'Dept', 'Fruits'
2, 'name', 'XX Oranges'
2, 'color', 'Orange'
2, 'taste', 'Sweet'
3, 'name', 'YY Apples'
3, 'color', 'Red'
4, 'taste', 'Very Sweet'
数据可以存储到层次结构中的任何级别,我想知道是否存在任何不匹配,例如'Gala''苹果'在其他架构中不是'非常甜'。
这两种模式中的ID可能不同。
答案 0 :(得分:1)
假设您的模式被称为“schema1”和“schema2”,您可以使用set运算符搜索不匹配。此查询返回的任何行表示两个模式之间的差异:
(
SELECT * FROM schema1.t1
MINUS
SELECT * FROM schema2.t1
)
UNION ALL
(
SELECT * FROM schema2.t1
MINUS
SELECT * FROM schema1.t1
);
这些迷你查询中的第一个为您提供了schema1.t1中不在schema2.t1中的所有行,第二个为您提供了来自schema2.t1的那些不在schema1.t1中的行 - 放入两个与UNION ALL一起为您提供所有不匹配。您可能会发现独立运行查询更加清晰,具体取决于您的需求。
显然只是在上面用't2'代替't1'来查看另一个表的差异。