sql >> Base de Datos >  >> RDS >> Mysql

MySQL ON ACTUALIZACIÓN DE CLAVE DUPLICADA al insertar un conjunto de resultados de una consulta

El problema es que en las cláusulas clave duplicadas no puede usar ninguna función de agrupación (como COUNT . Sin embargo, hay una manera fácil de evitar este problema. Simplemente asigna el resultado del COUNT(crime_id) llamar a una variable, que puede utilizar en las cláusulas clave duplicadas. Su declaración de inserción se vería así:

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;

Creé un SQL Fiddle que muestra cómo funciona:SQL-Fiddle

También podría usar UPDATE crimecount = VALUES(crimecount) y sin variables:

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 SQL-Fiddle-2