Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL ON DUPLICATE KEY UPDATE ao inserir um conjunto de resultados de uma consulta


O problema é que nas cláusulas de chave duplicada você não pode usar nenhuma função de agrupamento (como COUNT . No entanto, existe uma maneira fácil de contornar esse problema. Você acabou de atribuir o resultado do COUNT(crime_id) chamar para uma variável, que você pode use nas cláusulas de chave duplicada. Sua instrução de inserção ficaria assim:
INSERT INTO `simple_crimecount` (`date` , `city` , `crimecount`)(
    SELECT 
        `date`, 
        `city`,
        @determined_crimecount := count(`crime_id`) AS `determined_crimecount`
    FROM `big_log_of_crimes`
    GROUP BY `date`, `city`
) ON DUPLICATE KEY UPDATE `crimecount` = @determined_crimecount;

Eu criei um SQL Fiddle que mostra como ele funciona:SQL-Fiddle

Você também pode usar UPDATE crimecount = VALUES(crimecount) e sem variáveis:
INSERT INTO `simple_crimecount` (`date` , `city` , `crimecount`)(
    SELECT 
        `date`, 
        `city`,
        count(`crime_id`) AS `determined_crimecount`
    FROM `big_log_of_crimes`
    GROUP BY `date`, `city`
) ON DUPLICATE KEY UPDATE `crimecount` = VALUES(crimecount);

Consulte o SQL-Fiddle-2