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ộtWHERE
tốt cũng để giới hạn kết quả.