Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL ON DUPLICATE KEY UPDATE beim Einfügen einer Ergebnismenge aus einer Abfrage

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