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

Bạn không thể chỉ định bảng đích để cập nhật trong mệnh đề FROM

Vấn đề là MySQL, vì bất kỳ lý do gì, không cho phép bạn viết các truy vấn như sau:

UPDATE myTable
SET myTable.A =
(
    SELECT B
    FROM myTable
    INNER JOIN ...
)

Đó là, nếu bạn đang thực hiện UPDATE / INSERT / DELETE trên một bảng, bạn không thể tham chiếu bảng đó trong một truy vấn bên trong (bạn có thể tuy nhiên, hãy tham chiếu một trường từ bảng bên ngoài đó ...)

Giải pháp là thay thế phiên bản của myTable trong truy vấn phụ với (SELECT * FROM myTable) , như thế này

UPDATE myTable
SET myTable.A =
(
    SELECT B
    FROM (SELECT * FROM myTable) AS something
    INNER JOIN ...
)

Điều này dường như khiến các trường cần thiết được sao chép ngầm vào một bảng tạm thời, vì vậy nó được phép.

Tôi đã tìm thấy giải pháp này tại đây . Một lưu ý từ bài báo đó:

Bạn không muốn chỉ SELECT * FROM table trong truy vấn con trong cuộc sống thực; Tôi chỉ muốn giữ cho các ví dụ đơn giản. Trên thực tế, bạn chỉ nên chọn các cột bạn cần trong truy vấn trong cùng đó và thêm một WHERE tốt cũng để giới hạn kết quả.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Danh sách các thủ tục / hàm được lưu trữ Dòng lệnh Mysql

  2. ASP.NET sử dụng SqlConnection kết nối MySQL

  3. MySQL - Khắc phục - Lỗi - Mật khẩu của bạn không đáp ứng các yêu cầu chính sách hiện tại

  4. MySQL - Khôi phục cơ sở dữ liệu giản đồ hiệu suất bị giảm

  5. Tại sao điều kiện IN lại chậm hơn =trong sql?