Problem polega na tym, że w zduplikowanych klauzulach klucza nie można używać żadnych funkcji grupujących (takich jak COUNT
. Istnieje jednak prosty sposób na obejście tego problemu. Po prostu przypisujesz wynik COUNT(crime_id)
wywołaj zmienną, którą możesz użyj w zduplikowanych klauzulach klucza. Twoja instrukcja wstawiania wyglądałaby wtedy tak:
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;
Stworzyłem SQL Fiddle, który pokazuje, jak to działa:SQL-Fiddle
Możesz również użyć UPDATE crimecount = VALUES(crimecount)
i bez zmiennych:
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);
Zobacz SQL-Fiddle-2