Mysql
 sql >> база данни >  >> RDS >> Mysql

Защо тази актуализация на MySQL не работи?

Заявката е неуспешна, защото не можете да промените таблица и да изберете от същата таблица в подзаявка.

Вижте Синтаксис на подзаявка

Мисля, че можете да заобиколите това с някои JOIN трикове:

UPDATE meterreadings AS tgt
INNER JOIN (
  SELECT * FROM meterreadings
  WHERE meterreadingtype_id = 2
  ) AS src
ON tgt.meterreadingdate = src.meterreadingdate
   AND tgt.location_id = src.location_id
   AND tgt.created = src.created
   AND tgt.asset_id = src.asset_id
SET tgt.meterreading = src.meterreading

Не съм експерт по MySQL, но вярвам, че това работи, защото MySQL първо обработва подзаявката и съхранява резултата в паметта като временна таблица, която не се променя по време на UPDATE. Страничен ефект от това е, че ако резултатът от подзаявката е голям, тогава ще сдъвчете тон (или ще свършите) памет.

Единственият начин (доколкото знам) да заобиколите проблема с паметта е да намалите подзаявката, като използвате критерии, които не са пряко свързани с целта за актуализиране. Например, ако трябва да правите тези актуализации като част от еженощен процес, накарайте вътрешния SELECT да връща само редове, създадени през последните ~24 часа.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL тип данни INT(11) докато UNSIGNED INT(10)?

  2. създаване на база данни в mysql от java

  3. Грешка в MySQL/PHP:[2002] Само едно използване на всеки адрес на сокет (протокол/мрежов адрес/порт) обикновено е разрешено

  4. mysql изтриване, автоматично нарастване

  5. запишете var_dump в текстов файл