sql >> Databáze >  >> RDS >> Mysql

MySQL ON DUPLICATE KEY UPDATE při vkládání sady výsledků z dotazu

Problém je v tom, že v duplicitních klíčových klauzulích nemůžete použít žádné seskupovací funkce (např. COUNT . Existuje však snadný způsob, jak tento problém obejít. Stačí přiřadit výsledek COUNT(crime_id) volání proměnné, což můžete použít v duplicitních klíčových klauzulích. Váš příkaz vložení by pak vypadal takto:

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;

Vytvořil jsem SQL Fiddle, který vám ukáže, jak to funguje:SQL-Fiddle

Můžete také použít UPDATE crimecount = VALUES(crimecount) a žádné proměnné:

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

Viz SQL-Fiddle-2




  1. MySQL odstraňuje duplicitní řádky

  2. Jak získat aktuální pořadové číslo Auto_Increment pro tabulku MySQL / MariaDB

  3. mysql řazení a klasifikace prohlášení

  4. Jak přečtu tento textový soubor a vložím jej do MySQL?