Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL SU AGGIORNAMENTO CHIAVE DUPLICATA durante l'inserimento di un set di risultati da una query

Il problema è che nelle clausole di chiave duplicata non è possibile utilizzare alcuna funzione di raggruppamento (come COUNT . Tuttavia, esiste un modo semplice per aggirare questo problema. Assegni semplicemente il risultato del COUNT(crime_id) chiamare una variabile, che puoi utilizzare nelle clausole chiave duplicata. La tua dichiarazione di inserimento sarebbe quindi simile a questa:

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;

Ho creato un SQL Fiddle che ti mostra come funziona:SQL-Fiddle

Puoi anche usare UPDATE crimecount = VALUES(crimecount) e nessuna variabile:

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);

Consulta SQL-Fiddle-2