Вставить запрос проверьте, существует ли запись - Если нет, вставьте его [дубликат]


На этот вопрос уже есть ответ здесь:

У меня есть таблица 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 это.

Но я хочу сделать только один запрос.

Author: Vishnu Renku, 2013-04-09

5 answers

Вы можете использовать следующий запрос. Здесь он вставит 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
Author: Yogesh Suthar, 2013-04-09 09:59:01

Вы должны добавить УНИКАЛЬНЫЙ ключ в ip_addr, а затем использовать INSERT IGNORE.

Возможно, это поможет, если вы еще не слышали о UNIQUE: http://www.tutorialspoint.com/sql/sql-unique.htm

 8
Author: mrks, 2013-04-09 09:45:54

На вашем месте я бы применил ограничение UNIQUE к столбцу,

ALTER TABLE ip_list ADD CONSTRAINT IP_Unique UNIQUE(ip_addr)
 4
Author: Skinny Pipes, 2013-04-09 09:46:48

Вы можете сделать это с помощью Вставить... при обновлении дубликата ключа

ИЛИ

В качестве альтернативы вы также можете использовать Заменить

 3
Author: Suresh Kamrushi, 2013-04-09 09:46:54
 3
Author: Peter Kiss, 2013-04-09 09:47:04