2016-05-17 36 views
1

私は表Xと表Yを持っています。表Yは履歴表です。レコードがテーブルXに挿入または更新または削除されるたびに、履歴テーブルYに挿入されます。これで、不足しているレコードで履歴テーブルを更新しようとしています。このために私は差を得るためにマイナスクエリーを書いた。これらすべてのレコードを履歴テーブルに挿入する必要があります。私は 'マージ'と他の形式の挿入ステートメントを使用しようとしましたが、正確な出力を得ることはできませんでした。履歴表に挿入 - oracle SQL - PL/SQL

EX:

表X

A   B   C 
EMP NO EMP NAME EMP ADD 

表Y

A   B   C  D  E  F 
EMP NO EMP NAME EMP ADD st dt end dt indicator 

Iが表Xにはないように日付とインジケータを有する値として、三つの追加の列を使用する必要が挿入もののこれらの列。違いがある場合は、この履歴表の挿入を書くために私を助けてください。

+0

ストアドプロシージャを表示する –

答えて

1

これを行うにはいくつかの方法があります。一つはnot existsを使用することです:

insert into tabley (Y, A, B, C, EMPNO, EMPNAME, EMPADD) 
select X, A, B, C, EMPNO, EMPNAME, EMPADD 
from tablex x 
where not exists (
    select 1 
    from tabley 
    where tabley.y = x.X 
    ) 

ちょうどあなたが選択のためにそうであるようにあなたは、挿入のために同じ数の列を定義することを確認してください。他のフィールドがどこにあるかによって、サンプルデータと期待される結果によって異なります。

Btwの場合、これはxの値がtablexであることが一意の識別子であることを前提としています。そうでない場合は、上記のwhere基準を更新する必要があります。

0

あなたは(読みやすくするためにフォーマット)テーブルxの不足している列のデータを作成する必要があります。基本的に

insert into tabley(empno 
       , empname 
       , empadd 
       , st_dt 
       , end_dt 
       , indicator) 
select empno 
    , empname 
    , empadd 
    , to_date(some_date_you_create) 
    , to_date(another_date_or null) 
    , (whatever_starting_indicator_value_is_allowed) 
    from tablex x 
where not exists (select 1 
        from tabley y 
        where x.empno = y.empno); 

、あなたはあなたが決めるいくつかの任意のもので欠損値を作成する必要があります。これは、empnoが別のキー値であることも前提としています。

関連する問題