Rumah > Soal Jawab > teks badan
P粉2371257002023-08-28 13:59:47
Anda boleh melakukan ini dalam tiga langkah:
CREATE TABLE test2 AS SELECT PersId FROM pers p WHERE ( chefID IS NOT NULL OR gehalt < ( SELECT MAX ( gehalt * 1.05 ) FROM pers MA WHERE MA.chefID = p.chefID ) )
...
UPDATE pers P SET P.gehalt = P.gehalt * 1.05 WHERE PersId IN ( SELECT PersId FROM test2 ) DROP TABLE test2;
atau
UPDATE Pers P, ( SELECT PersId FROM pers p WHERE ( chefID IS NOT NULL OR gehalt < ( SELECT MAX ( gehalt * 1.05 ) FROM pers MA WHERE MA.chefID = p.chefID ) ) ) t SET P.gehalt = P.gehalt * 1.05 WHERE p.PersId = t.PersId
P粉4818158972023-08-28 13:51:38
Masalahnya ialah, atas sebab apa pun yang bodoh, MySQL tidak membenarkan anda menulis pertanyaan seperti ini:
UPDATE myTable SET myTable.A = ( SELECT B FROM myTable INNER JOIN ... )
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 bawah
UPDATE myTable SET myTable.A = ( SELECT B FROM (SELECT * FROM myTable) AS something INNER JOIN ... )
Ini 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: