Problém je v tom, že v duplicitních klíčových klauzulích nemůžete použít žádné seskupovací funkce (např. COUNT
. Existuje však snadný způsob, jak tento problém obejít. Stačí přiřadit výsledek COUNT(crime_id)
volání proměnné, což můžete použít v duplicitních klíčových klauzulích. Váš příkaz vložení by pak vypadal takto:
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;
Vytvořil jsem SQL Fiddle, který vám ukáže, jak to funguje:SQL-Fiddle
Můžete také použít UPDATE crimecount = VALUES(crimecount)
a žádné proměnné:
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);
Viz SQL-Fiddle-2