0

現在、数千のエントリを持つテーブルがあります。システム内のすべてのエントリに新しいデータ行を挿入する方法を見つけましたが (以下の例を参照)、残念ながら、一部のエントリには既に値が含まれていることがわかりました。行が既に存在するかどうかに基づいて、INSERT INTO 関数を選択的に実行する方法を見つけようとしています。

Column 1   Column 2   Column 3 
10         Address    True 
10         City       False
10         State      True
20         Address    True
20         City       True
20         State      True
20         NEW        NEW*

Column 1   Column 2   Column 3
10         Address    True
10         City       False
10         State      True
10         NEW        NEW
20         Address    True
20         City       True
20         State      True
20         NEW        NEW

挿入に使用したコードは次のとおりです。

insert into table-name(Column1, Column2, Column3)
  select 
     Column1, 'NEW', 'NEW*' 
  from 
     table-name 
  group by 
     Column1

ステートメントを使用する必要があると想定していますIF/ELSEが、ステートメントで問題が発生していIFます。現在、次のコードを使用しています。

IF Column 2 like 'New' leave NULL
ELSE 
  insert into table-name(Column1, Column2, Column3)
     select 
         Column1, 'NEW', 'NEW*' 
     from table-name 
     group by Column1

IF ステートメントが間違っていることはわかっていますが、既存の行の値が既に取り込まれている場合、それらを同じままにするために何をすべきかを理解しようとしています。

4

5 に答える 5

0

SQL Serverを使用すると、NOTEXISTSを実行できます

insert into table-name(Column1, Column2, Column3)
  select 
     Column1, 'NEW', 'NEW*' 
  from 
     table-name 
     WHERE NOT EXISTS (SELECT 1 FROM table-name xref WHERE xref.Column1 = table-name.Column1 AND xref.Column2 = 'NEW')
  group by 
     Column1
于 2013-03-20T15:09:09.933 に答える
0

INSERTIGNOREINTOまたはINSERT…ONDUPLICATEKEYUPDATE構文を使用できます

http://bogdan.org.ua/2007/10/18/mysql-insert-if-not-exists-syntax.html およびdev.mysql.comを参照してください

于 2013-03-20T15:01:21.560 に答える
0

欲しいのは「ONDUPLICATEKEY」の「INSERTINTO」だと思います。

参照: http ://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

于 2013-03-20T15:02:35.657 に答える
0

SQL Server の場合、CTE を使用して、挿入するデータセットを定義します。

WITH NonDupes (<your fieldlist>)
AS
(SELECT <your fieldlist> FROM <your tables> WHERE <tablea>.<column> NOT IN (SELECT <column> FROM <tableb>))
INSERT INTO
<tableb>
VALUES(SELECT * FROM NonDupes)
于 2013-03-20T15:08:16.110 に答える
0

Merge ステートメントを使用して、存在しない行のみを挿入できます。追加のボーナスとして、必要に応じて同じステートメント内の既存の行を更新できます。

http://msdn.microsoft.com/en-us/library/bb510625.aspx

于 2013-03-20T15:41:39.860 に答える