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

MySQL ON DUPLICATE KEY OPDATERING, mens du indsætter et resultatsæt fra en forespørgsel

Problemet er, at du i duplikatnøglesætningerne ikke kan bruge nogen grupperingsfunktioner (såsom COUNT . Der er dog en nem måde at undgå dette problem på. Du tildeler bare resultatet af COUNT(crime_id) kalde til en variabel, som du kan brug i duplikatnøglesætningerne. Din insert-sætning ville så se sådan ud:

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;

Jeg har oprettet en SQL Fiddle, der viser dig, hvordan den virker:SQL-Fiddle

Du kan også bruge UPDATE crimecount = VALUES(crimecount) og ingen variabler:

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

Se SQL-Fiddle-2




  1. MySQL Injection - Brug SELECT-forespørgsel til at OPDATERE/SLETTE

  2. MySQL-tabel -> Kan du returnere den samme række flere gange i den samme forespørgsel?

  3. Er der nogen måde at indsætte en stor værdi i en mysql DB uden at ændre max_allowed_packet?

  4. Sådan deaktiveres en fremmednøglebegrænsning i SQL Server (T-SQL-eksempler)