web-dev-qa-db-ja.com

レコードが存在する場合はクエリチェックを挿入-存在しない場合は挿入

MySQLテーブルip_list...があります。

+----+---------------+
| id |    ip_addr    |
+----+---------------+
|  1 | 192.168.100.1 |
|  2 | 192.168.100.2 |
|  3 | 192.168.100.3 |
|  4 | 192.168.100.4 |
|  5 | 192.168.100.5 |
+----+---------------+

ip_addr列にないレコードのみを追加します。

ip_addrテーブルに追加する次のレコードがあります

192.168.100.6
192.168.100.10
192.168.100.11
192.168.100.1   //already in column
192.168.100.12

192.168.100.1は既に列にあるため、追加したくありません。

では、INSERTクエリが最初にレコードを確認してから挿入することは可能ですか?

現在、私はこれを使っています。最初にレコードをSELECT照合し、次にそれを照合し、次にINSERTを照合します。

しかし、私は1つのクエリのみで処理したいと考えています。

20
Sumit Bijvani

以下のクエリを使用できます。ここでは、テーブルに存在しない場合にip_addressを挿入します。

INSERT INTO ip_list (ip_addr)
SELECT * FROM (SELECT '192.168.100.1') AS tmp
WHERE NOT EXISTS (
    SELECT ip_addr FROM ip_list WHERE ip_addr='192.168.100.1'
);
19
Yogesh Suthar

ip_addrにUNIQUEキーを追加してから、INSERT IGNOREを使用する必要があります。

UNIQUEをまだ聞いていない場合は、これが役立つかもしれません: http://www.tutorialspoint.com/sql/sql-unique.htm

8
mrks

私があなたなら、列にUNIQUE制約を強制します。

ALTER TABLE ip_list ADD CONSTRAINT IP_Unique UNIQUE(ip_addr)
4
Skinny Pipes

Insert ... on duplicate key update でそれを行うことができます

OR

代わりにあなたも使うことができます 置換

3
Suresh Kamrushi

MySQL INSERT IGNORE ステートメントを試してください。

3
Peter Kiss