2016-05-02 10 views
0

OriginalTableから定期的に新しいレコードをコピーしたいと私はArchiveTable持っています。これは私が働くかもしれないと思ったものです。TSQLアーカイブテーブルに新しい内容をコピーする

INSERT INTO OriginalTable 
    SELECT * 
    FROM ArchiveTable 
    WHERE NOT EXISTS (SELECT * 
         FROM OriginalTable ot 
         INNER JOIN ArchiveTable at ON ot.email = at.email) 

だけのような何かをやって...もちろん

INSERT INTO ArchiveTable 
    SELECT * FROM OriginalTable 

は、唯一の初期コピーのために動作します。

+0

EXISTSサブクエリと外部クエリを関連付ける必要があります。 –

+0

@TabAllemanあなたは少し詳しく説明できますか? OriginalTableとArchiveTableの両方のテーブルの構造は同じです。 – useruseruser

答えて

1

あなたの現在のクエリ:

INSERT INTO OriginalTable 
SELECT * FROM ArchiveTable 
WHERE NOT EXISTS 
(SELECT * FROM OriginalTable ot 
INNER JOIN ArchiveTable at 
ON ot.email = at.email) 

は、外側のクエリに関連していないEXISTSサブクエリを使用します。つまり、アーカイブテーブルの行と同じ電子メールを持つ行が元のテーブルに存在しない場合は、アーカイブテーブルのすべてを元のテーブルに挿入します。

おそらくあなたが望むものではありません。おそらく、元のテーブルにまだ存在しない特定の行を挿入する必要があります。ですから、外側のクエリにサブクエリを相関したい:

INSERT INTO OriginalTable 
SELECT * FROM ArchiveTable at 
WHERE NOT EXISTS 
(SELECT * FROM OriginalTable ot 
WHERE ot.email = at.email) 

このクエリは、元のテーブルに私はすでにオリジナルのテーブルにメールを持っていないアーカイブテーブル内の任意の行を挿入」、と言います"

+0

soooo簡単です。明確化のためにありがとう。それは長い朝でした! – useruseruser

関連する問題