2016-12-12 1 views
2

外部ツールを使用してデータロードを変更すると、そのツールを使用していくつかの結合に基づいてフラットファイルが生成されます。 SQL * Loaderを使用して表にロードされます。プライマリキーを持たない別の(一致する)テーブルではなく、あるテーブルに存在するレコードを見つける

私は、このプログラムの使用を外し、外部テーブルを使用して、テーブル挿入をデータベースに移動することにしたいと思います。私は私の結合の有効性と、プログラムが何をしているのかについては不明です。私が外部テーブルを使って作ったものと比較すると、私は14702052の合計レコードと14268891の別個のレコードを持っています。同じデータを持つ古いツールでロードされたテーブルと比較すると、14669198個のレコードがあり、14268888個のレコードがあります。私は重複が大丈夫だと心配していません。いくつかの値を更新していて、重複は問題ではありません。

私は余分な別の値が何であるか把握していないようです。私はマイナスを試しました、存在していない、存在していない、そして参加しています、私は頭の上から覚えていないいくつかの試みをしていますが、記録はありません。どちらのテーブルにも参加するためのテーブルの主キーはありません。

私はKdiff3を使って比較することができたレコードが少なかったのですが、出力が大きすぎて自分のコンピュータで実行できませんでした。私は余分なレコードを見つける最悪の試みとしてrownumによってそれを分解しようとするかもしれません。

誰かに代替案がありますか?

編集: ここではテーブル構造だが、名前

CREATE TABLE T ( 
ID varchar2(11 byte), 
CLASS_CD varchar2(4 byte), 
ITEM_NAME varchar2(60 byte), 
UNIT_OF_ISSUE varchar2(2 byte), 
PRICE number(15,2), 
ITEM_CD varchar2(3 byte), 
SERVICE_CD varchar2(2 byte)); 

の一部を取り除く必要があったここで私は、感度の値のほとんどを交換してきたものの、サンプルレコードです。

ID   CLASS_CD ITEM_NAME  UOI  PRICE ITEM_CD SERVICE_CD 
000000057 1111  NAME  FT  5.91 NULL  BC 
+0

サンプルデータと希望出力 – Teja

+0

テーブル構造とサンプルレコードが追加されました。私は本当に出力がどのように見えるのか気にしません。ちょうど3つの追加レコードが私の個々のカウントにどのようなものであるかを調べようとしています。 – wafflenator

答えて

3

あなたは同じ構造で新旧両方のテーブルを持っていると仮定すると、これはどのような場合には、あなたに、少なくとも3、レコード

select * from new_table 
minus 
select * from old_table 

を与えている必要があり、違いを見つけるために、このクエリを使用

select  count(case when tab='O' then 1 end) as cnt_old 
      ,count(case when tab='N' then 1 end) as cnt_new 

      ,id,class_cd,item_name,uoi,price,item_cd,service_cd 

from  (   select 'O' as tab,t.* from old_table t 
      union all select 'N'  ,t.* from new_table t 
      ) t 

group by id,class_cd,item_name,uoi,price,item_cd,service_cd 

having  count(case when tab='O' then 1 end) = 0 
     or count(case when tab='N' then 1 end) = 0 
; 
+0

これは最適な解決策です。何らかの理由でそれが見過ごされがちです。 – mathguy

+1

私は未来のためにそれを取る必要があります、ありがとう!まだこの役割で多くのことを学んでいます。 残念なことに、どちらもうまくいきません。これは、他の何かが自分のデータに間違っている可能性が高いことを意味します。セクション付きのKdiff3はまだ私にとっては良いチェックかもしれません。私はそれが私が必要としたことをするように見えるので、これをマークします!私はマイナス私は私が前にそれから0の結果があったと思った私の頭の何らかの理由で、想定された違いよりも大きな結果を得た後にスキップしたと思います。 – wafflenator

+0

ちょうどそれがデータに問題があったことを追加したいと思っていました。私のフラットファイルを壊していたキャリッジリターンでした。それがクリアされると上記の両方のクエリが機能しました。 – wafflenator

関連する問題