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

Proč tato aktualizace MySQL nefunguje?

Dotaz se nezdařil, protože nemůžete upravit tabulku a vybrat ze stejné tabulky v poddotazu.

Viz Syntaxe poddotazu

Myslím, že to můžete obejít nějakým trikem 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

Nejsem odborník na MySQL, ale věřím, že to funguje, protože MySQL nejprve zpracuje poddotaz a uloží výsledek do paměti jako dočasnou tabulku, která se během UPDATE nemění. Vedlejším efektem je, že pokud je výsledek dílčího dotazu velký, sežerete spoustu paměti (nebo jí dojde nedostatek).

Jediný způsob (pokud vím), jak obejít problém s pamětí, je zredukovat poddotaz pomocí kritérií, která přímo nesouvisí s cílem aktualizace. Pokud byste například tyto aktualizace prováděli jako součást nočního procesu, zajistěte, aby vnitřní SELECT vracel pouze řádky vytvořené za posledních ~24 hodin.




  1. Tipy k tabulce Microsoft Access – triky a pokyny, část 2

  2. Jak mohu získat přístup k nástroji příkazového řádku mysql při použití XAMPP v OS X?

  3. Jak použít klíčové slovo 'as' k aliasu tabulky v Oracle?

  4. Jaký je nejjednodušší způsob, jak vyčistit databázi z CLI pomocí manage.py v Django?