Проблемът е, че в дублиращите се ключови клаузи не можете да използвате никакви функции за групиране (като COUNT
. Въпреки това, има лесен начин за заобикаляне на този проблем. Просто присвоявате резултата от COUNT(crime_id)
извикване на променлива, която можете използвайте в дублиращите се ключови клаузи. Тогава вашето изявление за вмъкване ще изглежда така:
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;
Създадох SQL Fiddle, който ви показва как работи:SQL-Fiddle
Можете също да използвате UPDATE crimecount = VALUES(crimecount)
и без променливи:
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);
Вижте SQL-Fiddle-2