Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengapa pembaruan MySQL ini tidak berfungsi?

Kueri gagal karena Anda tidak dapat mengubah tabel dan memilih dari tabel yang sama dalam subkueri.

Lihat Sintaks Subquery

Saya pikir Anda bisa menyiasatinya dengan beberapa tipu muslihat GABUNG:

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

Saya bukan ahli MySQL, tapi saya yakin ini berhasil karena MySQL memproses subquery terlebih dahulu dan menyimpan hasilnya di memori sebagai tabel sementara, yang tidak berubah selama UPDATE. Efek sampingnya adalah jika hasil subquery besar, maka Anda akan menghabiskan banyak (atau kehabisan) memori.

Satu-satunya cara (sejauh yang saya tahu) untuk mengatasi masalah memori adalah dengan mengurangi subquery menggunakan kriteria yang tidak terkait langsung dengan target pembaruan. Misalnya, jika Anda melakukan pembaruan ini sebagai bagian dari proses malam, buat SELECT dalam hanya mengembalikan baris yang dibuat dalam ~24 jam terakhir.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tipe data MySQL mana yang digunakan untuk menyimpan nilai boolean?

  2. Kode Kesalahan:1222. Pernyataan SELECT yang digunakan memiliki jumlah kolom yang berbeda

  3. Cara Memberikan Semua Keistimewaan pada Database di MySQL

  4. Bisakah saya memasukkan kata sandi sekali untuk beberapa permintaan baris perintah mysql, di mana kueri tidak diketahui di muka?

  5. Meminta contoh yang sah untuk memanggil prosedur tersimpan C#:MYSQL