Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL ON DUPLICATE KEY UPDATE podczas wstawiania zestawu wyników z zapytania

Problem polega na tym, że w zduplikowanych klauzulach klucza nie można używać żadnych funkcji grupujących (takich jak COUNT . Istnieje jednak prosty sposób na obejście tego problemu. Po prostu przypisujesz wynik COUNT(crime_id) wywołaj zmienną, którą możesz użyj w zduplikowanych klauzulach klucza. Twoja instrukcja wstawiania wyglądałaby wtedy tak:

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;

Stworzyłem SQL Fiddle, który pokazuje, jak to działa:SQL-Fiddle

Możesz również użyć UPDATE crimecount = VALUES(crimecount) i bez zmiennych:

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

Zobacz SQL-Fiddle-2




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. #1136 – Liczba kolumn nie odpowiada liczbie wartości?

  2. Najlepsze sposoby naprawy uszkodzonej tabeli InnoDB w MySQL

  3. Błąd podczas ładowania modułu MySQLdb „Czy zainstalowałeś mysqlclient lub MySQL-python?”

  4. MySQL grupuje wyniki według okresów

  5. Konstrukcja zapytania SQL - rozdziel dane w kolumnie na dwie kolumny