Das Problem ist, dass Sie in den Klauseln für doppelte Schlüssel keine Gruppierungsfunktionen (wie COUNT
) verwenden können . Es gibt jedoch eine einfache Möglichkeit, dieses Problem zu umgehen. Sie weisen einfach das Ergebnis der COUNT(crime_id)
zu eine Variable aufrufen, was Sie können Verwendung in den doppelten Schlüsselklauseln. Ihre Insert-Anweisung würde dann so aussehen:
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;
Ich habe eine SQL-Fiddle erstellt, die Ihnen zeigt, wie es funktioniert:SQL-Fiddle
Sie können auch UPDATE crimecount = VALUES(crimecount)
verwenden und keine Variablen:
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);
Siehe SQL-Fiddle-2