Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tại sao bản cập nhật MySQL này không hoạt động?

Truy vấn không thành công vì bạn không thể sửa đổi một bảng và chọn từ chính bảng đó trong một truy vấn con.

Xem Cú pháp truy vấn con

Tôi nghĩ bạn có thể giải quyết vấn đề này bằng một số thủ thuật THAM GIA:

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

Tôi không phải là chuyên gia về MySQL, nhưng tôi tin rằng điều này hiệu quả vì MySQL xử lý truy vấn con trước tiên và lưu trữ kết quả trong bộ nhớ dưới dạng bảng tạm thời, bảng này không thay đổi trong quá trình CẬP NHẬT. Một tác dụng phụ của việc này là nếu kết quả của truy vấn con lớn, thì bạn sẽ tốn rất nhiều (hoặc hết) bộ nhớ.

Cách duy nhất (theo như tôi biết) để giải quyết vấn đề bộ nhớ là giảm bớt truy vấn con bằng cách sử dụng các tiêu chí không liên quan trực tiếp đến mục tiêu cập nhật. Ví dụ:nếu bạn thực hiện các cập nhật này như một phần của quy trình hàng đêm, hãy đặt SELECT bên trong chỉ trả về các hàng đã tạo trong ~ 24 giờ qua.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tập lệnh tạo người dùng Mysql

  2. Cách hiển thị giá trị Min và Max trên bảng tổng hợp động

  3. Swift httppost dữ liệu không chèn vào cơ sở dữ liệu MySQL

  4. Cách tính phần trăm tăng trưởng hàng tuần trong MySQL

  5. PDO PHP chèn vào DB từ một mảng kết hợp