Il problema è che nelle clausole di chiave duplicata non è possibile utilizzare alcuna funzione di raggruppamento (come COUNT
. Tuttavia, esiste un modo semplice per aggirare questo problema. Assegni semplicemente il risultato del COUNT(crime_id)
chiamare una variabile, che puoi utilizzare nelle clausole chiave duplicata. La tua dichiarazione di inserimento sarebbe quindi simile a questa:
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;
Ho creato un SQL Fiddle che ti mostra come funziona:SQL-Fiddle
Puoi anche usare UPDATE crimecount = VALUES(crimecount)
e nessuna variabile:
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);
Consulta SQL-Fiddle-2