0

2 つの Oracle DB スキーマがあり、各スキ​​ーマには次の 2 つのテーブルがあります。

1) 列を持つテーブル T1: child_id、parent_id、type
2) 列を持つテーブル T2: id、属性、値

これら 2 つのスキーマに格納されているデータを比較し、不一致を見つけるにはどうすればよいでしょうか (最善の方法で)。データは次のようになります。

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」が他のスキーマでは「Very Sweet」ではないなどの不一致があるかどうかを確認したいと考えています。

これら 2 つのスキーマでは、ID が異なっていてもかまいません。

4

1 に答える 1

1

スキーマが 'schema1' および 'schema2' と呼ばれると仮定すると、集合演算子を使用して不一致を検索できます。このクエリによって返される行は、2 つのスキーマの違いを表しています。

(
  SELECT * FROM schema1.t1
  MINUS
  SELECT * FROM schema2.t1
)
UNION ALL
(
  SELECT * FROM schema2.t1
  MINUS
  SELECT * FROM schema1.t1
); 

これらのミニクエリの最初のものは、schema2.t1 にはない schema1.t1 にあるすべての行を提供し、2 つ目は、schema1.t1 にない schema2.t1 の行を提供します。 UNION ALL は、すべての不一致を示します。必要に応じて、クエリを個別に実行する方が明確な場合があります。

上記の「t1」を「t2」に置き換えて、他のテーブルとの違いを確認してください。

于 2012-06-07T10:45:10.453 に答える