2017-03-17 23 views
0

宣言されたテーブルから選択したテーブルに値を挿入する方法が混乱しています。私は最初の複製の挿入を防止する以外に使用しましたが、複製の2番目の行を挿入する必要があります。一時テーブルから重複行を挿入する

Storage of the table 上記の表に2番目の値を入力するにはどうすればよいですか? Temporary table ここで達成するためのポイントは、操作するプライマリテーブルの2番目の値をtime_modeの値にすることです。

これは、上記のクエリから、私のクエリ

INSERT INTO temp_time(SwipeID,tdate,ttime,time_mode,raw_data,[Shift],eid,machineip) 
    SELECT a.SwipeID,a.tdate,a.ttime,a.time_mode,a.raw_data,1, eid FROM @temp_time 
    EXCEPT 
    SELECT SwipeID,tdate,ttime,time_mode,raw_data,Shift,eid,machineip from temp_time 

で、一つだけ値が挿入されています。私のクライアントは、複製された値が反映されるように心を変えました。 time_modeの値を変更することは、私が作成したシステムによって変更することができます。例外を挿入せずに再度クエリを使用すると、問題の原因となるプライマリテーブルの行が3行あり、反映したいのは2行だけなので問題ありません。

+0

を重複した値を挿入したいと思う理由:その場合は

はここにあなたが既に挿入されている前の行を排除することで、あなたがそれを行うことがどのようにですか?通常、それはあなたが取り除きたいもののようなものです。 – ZLK

+0

重複する行を作成したい場合、テーブルは 'プライマリキー 'に関してどのように動作すると思われますか? – Arash

+0

2番目の値を持ち、time_modeを変更できるので – Clarice

答えて

1

私は最後にあなたの問題を正しく理解していると思います。 2番目のテーブルにデータを挿入せずにデータを挿入した最初のクエリを実行し、残りの元の重複を挿入したいと仮定します。

WITH dupes AS (
    SELECT *, ROW_NUMBER() OVER(
      PARTITION BY SwipeID, tdate, ttime, time_mode, raw_data,[Shift], eid, machineip 
      ORDER BY (SELECT(0)) 
     ) AS row_num 
    FROM SourceTable 
) 
INSERT INTO DestinationTable (/*columns*/) 
SELECT /*values you need*/ 
FROM dupes 
WHERE row_num > 1; 
+0

ありがとう!私は彼らが再度クエリを実行する場合、行数2以上がソーステーブルに複製されることを恐れています。 – Clarice

+1

@Clariceさて、 'SELECT COUNT(*)AS TO DestinationTable GROUP BY [関連フィールド]'に参加し、 'WHERE row_num> total'を実行することができます。 – plalx

0

あなたはMYSQLを使用していると仮定します。

INSERT INTO your_first_table(SwipeID,tdate,ttime,time_mode,raw_data,shift,eid,machineip) 
    SELECT a.SwipeID,a.tdate,a.ttime,a.time_mode,a.raw_data,1,a.eid,a.machineip FROM your_second_table a ORDER BY a.SwipeID DESC LIMIT 1, 1 
関連する問題