Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL ON DUPLICATE KEY UPDATE lors de l'insertion d'un jeu de résultats à partir d'une requête

Le problème est que dans les clauses de clé en double, vous ne pouvez pas utiliser de fonctions de regroupement (telles que COUNT . Cependant, il existe un moyen simple de contourner ce problème. Vous venez d'attribuer le résultat du COUNT(crime_id) appeler une variable, que vous pouvez utiliser dans les clauses de clé en double. Votre instruction d'insertion ressemblerait alors à ceci :

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;

J'ai créé un SQL Fiddle qui vous montre comment cela fonctionne :SQL-Fiddle

Vous pouvez également utiliser UPDATE crimecount = VALUES(crimecount) et aucune variable :

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);

Voir le SQL-Fiddle-2