Vấn đề là trong các mệnh đề khóa trùng lặp, bạn không thể sử dụng bất kỳ hàm nhóm nào (chẳng hạn như COUNT
. Tuy nhiên, có một cách dễ dàng để giải quyết vấn đề này. Bạn chỉ cần gán kết quả của COUNT(crime_id)
gọi đến một biến mà bạn có thể sử dụng trong các mệnh đề chính trùng lặp. Khi đó, câu lệnh chèn của bạn sẽ giống như sau:
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;
Tôi đã tạo SQL Fiddle cho bạn biết cách nó hoạt động: SQL-Fiddle
Bạn cũng có thể sử dụng UPDATE crimecount = VALUES(crimecount)
và không có biến:
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);
Xem SQL-Fiddle-2