2016-04-19 12 views
3

私は2つのテーブルTBTC03とTBTC03Yを持っていて、TBTC03Yには2つの余分なカラムがEFFDTEとEXPDTEとしてあります。
TC03データで構築された一致するTC03エントリがTC03Y
に新しいTC03Yレコードを発見されない場合他のテーブルのデータをマージする際の主キー違反

発効日は、 'にデフォルト設定されます:私は、次のロジックでTBTC03YするTBTC03からのデータをマージする必要があります1980' 年1月1日


有効期限は-30-1995' '09にデフォルト設定されます私は同じとしてのクエリを書いた:

insert into TBTC03Y (LOB,MAJPERIL,LOSSCAUSE,NUMERICCL,EFFDTE,EXPDTE) 
    select LOB,MAJPERIL,LOSSCAUSE,NUMERICCL,'0800101' ,'0950930' 
    from TBTC03 where not EXISTS (select * from TBTC03Y where 
TBTC03Y.LOB =  TBTC03.LOB AND 
TBTC03Y.MAJPERIL = TBTC03.MAJPERIL AND 
TBTC03Y.LOSSCAUSE = TBTC03.LOSSCAUSE AND 
TBTC03Y.NUMERICCL = TBTC03.NUMERICCL) 

両方の表の主キーはLOB、MAJPERILおよびLOSSCAUSEです。

しかし私はすでに主キーのデータを持っているいくつかのTBTC03Yレコードを持っています。

上記のクエリを実行すると、一部の行で主キー制約が発生します。 私はそれをどのように遂行できるかを理解することができません。

+0

サンプルデータと望ましい結果は、本当にあなたがしたいことを説明するのに役立ちます。 –

+0

Gordonに感謝します。サンプルデータを書いているうちに、私は問題を理解しました。 :D – CHS

答えて

3

問題プライマリとはキーは、あなたも含まれていることですWHERE句でNUMERICCLを検索します。これを削除すると、一意のデータが挿入されます。

同じLOB、MAJPERILおよびLOSSCAUSEを持つが、NUMERICCLが異なるレコードがいくつかあるように、別のプロセスを作成する必要があります。私はここで3つのオプションを考えることができます。

  1. 修正が必要なデータに問題があります。
  2. この値を一致させるように更新したい場合があります。この場合、INSERT INTOではなくUPDATEが表示されます。
  3. 複合主キーを更新して、NUMERICCL列を含める必要があります。
  4. where句からNUMERICCLを削除すると、これも修正されます。
+1

オハイオ州。私は質問のサンプルデータを書こうとしている間にそれを理解しました!ありがとうございました!! – CHS

+0

優れている、質問をすることは、あなた自身のために何かを働かせる素晴らしい方法です:)。私は決してtechieではありませんし、ときどき私が立ち往生している彼女の質問をするプロジェクトマネージャーの横に座っています。彼女はほとんどの部分を助けることができませんが、ポイントは私の頭の中で何かを引き起こす質問をすることです。 –

3

両方のテーブルのPK{LOB, MAJPERIL, LOSSCAUSE}の場合は、where句からTBTC03Y.NUMERICCL = TBTC03.NUMERICCLを削除する必要があります。

例:t2

t1{LOB, MAJPERIL, LOSSCAUSE, NUMERICCL} 
    1 1   1   1 

t2{LOB, MAJPERIL, LOSSCAUSE, NUMERICCL} 
    1 1   1   2 

ない行が存在しない:

TBTC03Y.LOB =  TBTC03.LOB AND 
TBTC03Y.MAJPERIL = TBTC03.MAJPERIL AND 
TBTC03Y.LOSSCAUSE = TBTC03.LOSSCAUSE AND 
TBTC03Y.NUMERICCL = TBTC03.NUMERICCL 

しかし、挿入がobvioulsy t2PK制約に違反します。

t2{LOB, MAJPERIL, LOSSCAUSE} 
    1 1   1 
関連する問題