2013-07-20 3 views
1

Имея проблему с этим запросом. (MySql)ON DUPLICATE KEY update (с несколькими предложениями)

У меня есть первичный ключ (ID), и я хочу, чтобы либо вставить новое значение, если условия не существует или обновить существующий:

INSERT into records (name, value, p_id, c_id) 
VALUES ('Store', 'TX', 1188913, 1133) 
ON DUPLICATE KEY UPDATE name = 'TX' WHERE p_id = 6188002 and c_id = 77102 

Таким образом, в этом случае, я бы есть запись, как таковой, что уже существует:

id = 10235192 
name = 'Store' 
value = 'AL' 
p_id = 6188002 
c_id = 77102 

И я надеюсь, что эта запись обновляется от значения = «AL» на «TX»

Но все, что я вижу это новая запись, вставляемая , Что я делаю не так?

ответ

2

Для работы необходимо указать ограничение UNIQUE на составной столбец для INSERT...ON DUPLICATE KEY UPDATE.

ALTER TABLE records ADD CONSTRAINT tb_uq UNIQUE (p_id, c_id) 

и WHERE статья не требуется.

INSERT into records (name, value, p_id, c_id) 
VALUES ('Store', 'TX', 1188913, 1133) 
ON DUPLICATE KEY UPDATE value = 'TX' 
+0

Единственный путь вокруг него добавлял уникальные ключи, которые были мои fear.Thanks – user2124871

+0

могли бы я знать, как написать это в SQL Server ... – kasim

0

У меня была та же проблема, и ответ можно найти здесь.

Conditional duplicate key updates with MySQL

Фактический ответ, что WHERE пункт не поддерживает в MySQL, и вы должны использовать IF условия.

Что-то вроде этого:

INSERT INTO daily_events 
(created_on, last_event_id, last_event_created_at) 
VALUES 
('2010-01-19', 23, '2010-01-19 10:23:11') 
ON DUPLICATE KEY UPDATE 
last_event_id = IF(last_event_created_at < VALUES(last_event_created_at),  VALUES(last_event_id), last_event_id), 
last_event_created_at = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_created_at), last_event_created_at); 
Смежные вопросы