Masalahnya adalah MySQL, untuk alasan apa pun yang tidak masuk akal, tidak mengizinkan Anda menulis kueri seperti ini:
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM myTable
INNER JOIN ...
)
Yaitu, jika Anda melakukan UPDATE /INSERT /DELETE pada tabel, Anda tidak dapat mereferensikan tabel itu dalam kueri dalam (Anda bisa namun referensi bidang dari tabel luar itu...)
Solusinya adalah mengganti instance myTable di sub-kueri dengan (SELECT * FROM myTable) , seperti ini
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM (SELECT * FROM myTable) AS something
INNER JOIN ...
)
Hal ini tampaknya menyebabkan bidang yang diperlukan disalin secara implisit ke dalam tabel sementara, sehingga diperbolehkan.
Saya menemukan solusi ini di sini . Catatan dari artikel itu:
Anda tidak ingin hanya
SELECT * FROM tabledalam subquery dalam kehidupan nyata; Saya hanya ingin membuat contoh sederhana. Pada kenyataannya, Anda seharusnya hanya memilih kolom yang Anda butuhkan dalam kueri terdalam itu, dan menambahkanWHEREyang bagus klausa untuk membatasi hasil juga.