2017-05-25 22 views
0

同じデータベース上で互いに同じ2つのテーブルがあります.1つはアップロードされたデータの一時的な '保持'テーブル、もう1つはパーマネントを格納するライブデータテーブルですデータ。SQLテーブル - テーブルからテーブルへのコピー

この理由は、2つのテーブルを比較して、最初に存在していたものと新しいものが更新されていることを確認するためです。

私の質問は、比較段階が完了してユーザーがアップロードを送信したら、テンポラリテーブルから既存のテーブルにデータをコピーして、そこに新しいレコードを挿入する方法です既存のテーブルが存在し、永久テーブルにすでに存在する場合(MonthIDyearID)、それは重複がないようにちょうどUPDATEである必要があります。

YearIDMonthIDが既に他のテーブルにあるかどうかを確認して、レコードが存在するかどうかを確認します。両方のテーブルが同一であることに注意してください。ここで

は、いくつかのサンプルデータです:

表1

SpendID Spend MonthNo YearID ChangedBy 
47  1444.19  2  4  12 

表2

SpendID Spend MonthNo YearID ChangedBy  
1  1500.54  2  4  12 

申し訳ありませんが、これは理にかなって願っています。

私はUPDATEMERGEを調べてみましたが、ここでは使用できない主識別キーが動作しているようです。

私は苦労しているように、これを手伝うために外部の意見が必要です。

+1

サンプルデータを投稿してください。 –

+0

「MonthID」と「YearID」の組み合わせがプライマリキー(プライマリ識別キー)を作成する場合、それらの2つの列を「MERGE」ステートメントで使用できます。または 'INSERT + UPDATE'の組み合わせで –

+0

サンプルデータで更新しました。 –

答えて

0

MERGEまたはINSERT + UPDATEのいずれかの組み合わせを使用できます。私は後者を好む。

-- Add missing records 
INSERT INTO [Table 1] (SpendID, Spend, MonthNo, YearID, ChangedBy) 
SELECT 
    SpendID 
    , Spend 
    , MonthNo 
    , YearID 
    , ChangedBy 
FROM [Table 2] t2 
WHERE NOT EXISTS (SELECT 1 
        FROM [Table 1] t1 
        WHERE t1.MonthNo = t2.MonthNo 
         AND t1.YearID = t2.YearID) 

-- Update existing records 
UPDATE t1 
    SET t1.Spend = t2.Spend 
FROM [Table 1] t1 
    INNER JOIN [Table 2] t2 
     ON t1.MonthNo = t2.MonthNo 
      AND t1.YearID = t2.YearID 

MERGEは、特定のシナリオでパフォーマンス上の問題を引き起こす可能性があるので、私はMERGEの上にこれを好む理由があります。オンラインで多くの記事がありますが、私はちょうどa link to an article that exposes one problem with MERGEを投稿し、さらにいくつかの接続項目、at the bottom of the article、その報告書の問題はMERGEと関連しています。

+0

Radu Gheorghiuありがとう、私はこれを試して、うまくいけば私は私の目的のために働くことができます。 –

2

SQLiteには、次のコマンドを使用できます。delete-delete、insert、select !!!

関連する問題