2017-12-04 12 views
-1

私は2つのテーブル(userfromとuserto)を持っています。一意のレコードを選択し、別のテーブルに挿入して重複を避けてください。

「userfrom」テーブルから「userto」にデータを挿入し、「username」と「date」という2つの列に条件を実装したいとします。

基本的に私は "userfrom"から "userto"にデータを貼り付けています。

挿入前の状態はです。

「username」と同じ「date」が挿入されるべきではありません。 同じユーザー名を使用できますが、日付は異なる場合があります。 (INSERTクエリの再実行時には、私は同じデータが重複することにしたいいけないこの挿入クエリは30分のブラケットで5時間のために実行されます。) :

だけusernameは注意してください、両方のテーブル

の間で同じです表userfrom

1 sampleusername 2017-12-04 
2 sampleusername 2017-12-04 
3 sampleusername2 2017-12-04 
4 sampleusername 2017-12-05 

usertto

1 sampleusername 2017-12-04 
2 sampleusername2 2017-12-04 
3 sampleusername 2017-12-05 
+1

バージョンの前後にいくつかのサンプルテーブルデータを追加します。現在のクエリの試行も表示してください。 – jarlh

+0

表userfrom 1 sampleusername 2017年12月4日 2 sampleusername 2017年12月4日 3 sampleusername2 2017年12月4日 表のusertto 1 sampleusername 2017年12月4日 2 sampleusername2 2017年12月4日 –

+0

編集してくださいあなたのコメントにあなたの質問がありますので、サンプルデータセットで適切にフォーマットできます。 – kchason

答えて

1

SQL DEMO

あなたは、以下のようなSQLサーバーにGROUP BYEXISTSを使用することができます。

insert into userto (username, date) 
select distinct username, date from userfrom uf 
where 
not exists(select 1 from userto where username=uf.username and date=uf.date) 
+0

なぜ集約関数を使用しない場合GROUP BYですか? – jarlh

+0

私は 'distinct'を既に使っていたのと同じように代わりに使っていますが、どちらも同じ結果を出しています。 –

0

あなたは2つのテーブルをLEFT JOIN、その後、唯一このようなusertoテーブルに存在しないuserfromからの値を挿入することができます。

INSERT INTO userTo 
    (
     username 
     ,userDate 
    ) 
SELECT DISTINCT f.username 
     ,f.userDate 
FROM usertrom f 
LEFT JOIN userto t ON f.username = t.username AND f.userDate = t.userDate 
WHERE t.id IS NULL 
関連する問題