2014-02-17 2 views
0

Я начинаю с запроса, как это:Добавить «на дубликат ключа обновления» статьи для вставки в запрос

insert into summary (col1, col2, Total) 
select col1, col2, count(col4) as total from importdata 
where col1 = 'abc' and col4 in ('1A', '2A') 
group by col1, col2 
order by col1, col2 

, и я не смог определить, как правильно «на дубликат» пункта. Предложение я думаю, что мне нужно

on duplicate key update total=count(col4) 

и я поместил его в качестве последней строки в запросе и в линии после того, как, где положение, но и вызвали ошибки. Является ли моя статья даже правильной и куда ей нужно идти?

(в худшем случае я могу использовать «вставить игнорировать», но я думаю, что делает обновление будет лучше.)

ответ

0

Вы не можете использовать COUNT или другие групповые функции в предложении ON DUPLICATE KEY UPDATE. Что вы можете сделать вместо этого заключается в следующем:

INSERT INTO summary (col1, col2, Total) 
    SELECT col1, col2, count(col4) 
    FROM importdata 
    WHERE col1 = 'abc' AND col4 IN ('1A', '2A') 
    GROUP BY col1, col2 
    ORDER BY col1, col2 
ON DUPLICATE KEY UPDATE Total = VALUES(Total) 

Это говорит о том, если есть дубликат ключа, вместо того, чтобы вставить новую строку просто установить столбец total на значение, которое вы бы вставили в Total. Обратите внимание, что я избавился от as total, что вызвало бы проблемы, так как у вас уже есть столбец с именем Total, и имена не чувствительны к регистру.

0

Вы не можете использовать функции для повторного обновления ключа, однако вы можете создать переменную, а затем использовать эту переменную.

INSERT INTO summary (col1, col2, Total) 
    select col1, col2, @totalCount := count(col4) as Total from importdata 
    where col1 = 'abc' and col4 in ('1A', '2A') 
    group by col1, col2 
    order by col1, col2 
) ON DUPLICATE KEY UPDATE Total = @totalCount; 
Смежные вопросы