Het probleem is dat je in de dubbele sleutelclausules geen groeperingsfuncties kunt gebruiken (zoals COUNT
. Er is echter een eenvoudige manier om dit probleem te omzeilen. U wijst gewoon het resultaat van de COUNT(crime_id)
. toe aanroepen naar een variabele, die u kunt gebruik in de dubbele sleutelclausules. Uw insert-statement ziet er dan als volgt uit:
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;
Ik heb een SQL Fiddle gemaakt die je laat zien hoe het werkt:SQL-Fiddle
U kunt ook UPDATE crimecount = VALUES(crimecount)
. gebruiken en geen variabelen:
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);
Zie de SQL-Fiddle-2