DBにまだ存在しない場合、データベース(MySQL)にデータを入力する方法を検索します:次のようなもの:
INSERT INTO TABLE(id,name,surname) VALUES('','name1','surname1')
WHERE NOT EXISTS (SELECT * FROM TABLE)
このクエリの何が問題になっていますか?
上記のクエリでは使用できません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;
そして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')
次のように定義されたテーブルがあるとします。
+------+ +------+
|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を使用していないので、完璧な構文を持っているかどうかはわかりませんが、それは大まかな範囲内にあるはずです.
質問する前に宿題をすることをお勧めします。グーグルまたはスタックオーバーフローを見ると、あなたと同様の質問を見つけることができます:
それがあなたの問題を解決すると信じています。
明確にするために: いいえ、INSERT で WHERE を使用することはできません。ただし、はい、テーブルをロックして、テーブルが存在する場所にレコードを挿入しないようにすることができます。これは CONSTRAINT と呼ばれ、テーブルの作成時に宣言する必要があります。
必要なものはすべて、リンクされた質問にあります。