Jadual sasaran untuk kemas kini tidak boleh ditentukan dalam klausa FROM
P粉354602955
2023-08-27 14:46:57
<p>Saya mempunyai jadual mysql yang ringkas:</p>
<pre class="brush:php;toolbar:false;">BUAT JADUAL JIKA TIDAK WUJUD `pers` (
`persID` int(11) BUKAN NULL AUTO_INCREMENT,
`nama` varchar(35) BUKAN NULL,
`gehalt` int(11) BUKAN NULL,
`chefID` int(11) LALAI NULL,
KUNCI UTAMA (`persID`)
) ENJIN=CHARSET LALAI MyISAM=latin1 AUTO_INCREMENT=4;
INSERT IN TO `pers` (`persID`, `name`, `gehalt`, `chefID`) NILAI
(1, 'blb', 1000, 3),
(2, 'sebagai', 1000, 3),
(3, 'chef', 1040, NULL);</pre>
<p>Saya cuba menjalankan kemas kini berikut tetapi hanya menerima ralat 1093: </p>
<pre class="brush:php;toolbar:false;">KEMASKINI pers P
SET P.gehalt = P.gehalt * 1.05
DI MANA (P.chefID BUKAN NULL
ATAU gehalt <
(PILIH (
PILIH MAX(gehalt * 1.05)
DARIPADA pers MA
DI MANA MA.chefID = MA.chefID)
AS_pers
))</pra>
<p>Saya mencari ralat dan menemui halaman berikut daripada mysql http://dev.mysql.com/doc/refman/5.1/en/subquery-restrictions.html tetapi itu tidak membantu saya. </p>
<p>Bagaimanakah saya boleh membetulkan pertanyaan sql? </p>
Anda boleh melakukan ini dalam tiga langkah:
...
atau
Masalahnya ialah, atas sebab apa pun yang bodoh, MySQL tidak membenarkan anda menulis pertanyaan seperti ini:
Iaitu, jika anda ingin melakukan
UPDATE
/INSERT
/DELETE
operasi di atas meja, anda tidak boleh membuat pertanyaan secara dalaman (tetapi anda boleh meang rujukan dari jadual luaran...)Penyelesaian adalah untuk meletakkan
myTable
实例替换为(SELECT * FROM myTable)
dalam subquery seperti yang ditunjukkan di bawahIni jelas akan menyebabkan medan yang diperlukan disalin secara tersirat ke dalam jadual temp, jadi ini dibenarkan.
Saya jumpa penyelesaian ini di sini. Komen pada artikel ini: