1

DBにまだ存在しない場合、データベース(MySQL)にデータを入力する方法を検索します:次のようなもの:

 INSERT INTO TABLE(id,name,surname) VALUES('','name1','surname1')
 WHERE NOT EXISTS (SELECT * FROM TABLE)

このクエリの何が問題になっていますか?

4

3 に答える 3

8

上記のクエリでは使用できませんNOT EXISTSが、サブクエリでは使用できます。LEFT JOINとサブクエリを使用してそれを行う 1 つの方法を次に示します。

INSERT INTO yourtable (name, surname) 
SELECT a.name, a.surname
FROM  
  (SELECT 'name1' name,'surname1' surname) a 
  LEFT JOIN yourtable b ON 
      a.name = b.name AND a.surname = b.surname
WHERE b.name IS NULL;

SQL フィドルのデモ

そしてNOT EXISTSアプローチ:

INSERT INTO yourtable (name, surname) 
SELECT a.name, a.surname
FROM  
  (SELECT 'name1' name,'surname1' surname) a 
WHERE NOT EXISTS (
       SELECT 1 
       FROM yourtable 
       WHERE name = 'name1' and surname = 'surname1')

もっとフィドル

于 2013-03-25T18:31:47.360 に答える
0

次のように定義されたテーブルがあるとします。

+------+  +------+
|Names |  |Add   |
+------+  +------+
|ID    |  |ID    |
|FName |  |FName |
|LName |  |LName |
+------+  +------+

重複を追加せずに Add テーブルを Names テーブルに挿入したい場合は、次の選択ステートメントを使用して、必要な各挿入ステートメントの行を作成できます。これにより、監査証跡を作成するという追加の利点も得られます。

Select CONCAT('INSERT INTO Names \(ID, FName, LName\) VALUES \(',a.ID,',',a.FName,',',a.LName,'\)')
From Add a LEFT JOIN Names N on a.ID = n.ID AND a.FName = n.FName AND a.LName = n.FName
Where n.ID is null;

私はmySQLを使用していないので、完璧な構文を持っているかどうかはわかりませんが、それは大まかな範囲内にあるはずです.

于 2013-03-25T19:05:58.633 に答える
0

質問する前に宿題をすることをお勧めします。グーグルまたはスタックオーバーフローを見ると、あなたと同様の質問を見つけることができます:

MySQL: テーブルに存在しない場合はレコードを挿入する

それがあなたの問題を解決すると信じています。

明確にするために: いいえ、INSERT で WHERE を使用することはできません。ただし、はい、テーブルをロックして、テーブルが存在する場所にレコードを挿入しないようにすることができます。これは CONSTRAINT と呼ばれ、テーブルの作成時に宣言する必要があります。

必要なものはすべて、リンクされた質問にあります。

于 2013-03-25T18:39:48.543 に答える