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