0

我有两个 Oracle DB 模式,每个模式都有以下两个表:

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”“Apples”在其他模式中不是“非常甜”。

这两种模式中的 id 可以不同。

4

1 回答 1

1

假设您的架构称为“架构 1”和“架构 2”,您可以使用集合运算符搜索不匹配。此查询返回的任何行都表示两种模式之间的差异:

(
  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' 即可查看其他表的差异。

于 2012-06-07T10:45:10.453 回答