2013-03-01 3 views
1

Я сделал много исследований по этому вопросу и пришел к следующему:вставки на дубликат ключа обновления, если

INSERT INTO actives 
SELECT email, active_date 
FROM actives_ac 
ON DUPLICATE KEY UPDATE active_date = IF (
    active_date < VALUES(active_date), VALUES(active_date), active_date 
); 

что приводит, SQL Error (1136): Column count doesn't match value count at row 1.

email Поле VARCHAR(255) является как KEY, так и UNIQUE в обеих таблицах. active_date является полем DATE.

Я пытаюсь вставить запись, если она новая в таблице активов, или обновить запись, если значение в actives_ac.active_date новее, чем значение, уже имеющееся в actives.active_date.

+0

Это говорит о том, что количество колонок не совпадает между таблицами, которые вы используете. Покажите нам свою структуру db. – DiMono

+0

Сколько полей имеет 'актив'? –

ответ

0

Это просто означает, что количество значений, которые вы хотите вставить, не соответствует общему количеству столбцов в таблице. Постарайтесь быть более явным, указав столбцы, где значения будут вставлены, например,

INSERT INTO actives (email, active_date) 
SELECT email, active_date 
FROM actives_ac 
..... 

Примечание: Причина, почему вы делаете это потому, что у вас есть столбец, который был установлен как AUTO_INCREMENT ред, верно?

+0

Вы пробовали запрос выше? –

+0

запрос будет выполнен, если вы передадите значение 'NULL' для' ID', например, 'INSERT INTO active SELECT NULL, email, active_date ....' –

+1

Спасибо JW, что исправил мою ошибку. – David