sql >> Database >  >> RDS >> Mysql

MySQL OP DUPLICATE KEY UPDATE tijdens het invoegen van een resultatenset van een query

Het probleem is dat je in de dubbele sleutelclausules geen groeperingsfuncties kunt gebruiken (zoals COUNT . Er is echter een eenvoudige manier om dit probleem te omzeilen. U wijst gewoon het resultaat van de COUNT(crime_id) . toe aanroepen naar een variabele, die u kunt gebruik in de dubbele sleutelclausules. Uw insert-statement ziet er dan als volgt uit:

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;

Ik heb een SQL Fiddle gemaakt die je laat zien hoe het werkt:SQL-Fiddle

U kunt ook UPDATE crimecount = VALUES(crimecount) . gebruiken en geen variabelen:

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

Zie de SQL-Fiddle-2




  1. Wanneer wordt SQLiteOpenHelper onCreate() / onUpgrade() uitgevoerd?

  2. Gegevens van de ene tabel in de andere invoegen in MySQL

  3. Ubuntu 18.04 voor SQL Server 2019 op virtuele machine installeren met VMware Workstation

  4. SQL-instructie negeert waar parameter