Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyelesaikan Ralat 'Anda tidak boleh menentukan jadual sasaran untuk kemas kini dalam klausa FROM' MySQL?

Bagaimana untuk Menyelesaikan Ralat 'Anda tidak boleh menentukan jadual sasaran untuk kemas kini dalam klausa FROM' MySQL?

Patricia Arquette
Lepaskan: 2025-01-22 20:01:08
asal
779 orang telah melayarinya

How to Solve MySQL's

Menyelesaikan masalah MySQL "Anda tidak boleh menentukan jadual sasaran untuk kemas kini dalam klausa FROM" Ralat

Isunya:

Menghadapi ralat "Anda tidak boleh menentukan jadual sasaran untuk kemas kini dalam klausa FROM" semasa pernyataan UPDATE MySQL yang menyasarkan jadual (cth., pers) menunjukkan had dalam pemprosesan pertanyaan MySQL.

Contoh Senario:

Katakan anda mempunyai pertanyaan UPDATE berikut:

<code class="language-sql">UPDATE pers P
SET P.gehalt = P.gehalt * 1.05
WHERE (P.chefID IS NOT NULL OR gehalt < ... ); </code>
Salin selepas log masuk

Pertanyaan ini cuba mengemas kini lajur gehalt dalam jadual pers berdasarkan keadaan yang melibatkan jadual pers yang sama, menyebabkan ralat.

Mengapa Ini Berlaku:

Sekatan MySQL menghalang kemas kini yang samar-samar di mana fasal FROM boleh membawa kepada pengubahsuaian yang tidak diingini.

Penyelesaian:

Penyelesaian melibatkan mencipta alias sementara jadual menggunakan subquery:

<code class="language-sql">UPDATE pers P
SET P.gehalt = (SELECT T.gehalt * 1.05 FROM (SELECT * FROM pers) AS T WHERE T.persID = P.persID)
WHERE (P.chefID IS NOT NULL OR P.gehalt < ...);</code>
Salin selepas log masuk

Pertanyaan yang disemak ini mengelakkan rujukan langsung kepada pers dalam pernyataan UPDATE itu sendiri. Subkueri (SELECT * FROM pers) AS T mencipta alias jadual sementara T, membenarkan pernyataan UPDATE merujuk data yang diperlukan tanpa melanggar peraturan MySQL.

Nota Penting:

Semasa menggunakan SELECT * memudahkan contoh, untuk prestasi optimum, pilih hanya lajur yang diperlukan daripada jadual pers dalam subkueri. Sentiasa masukkan klausa WHERE yang berkaitan dalam subkueri anda untuk memastikan pengambilan data yang cekap. Dalam contoh di atas, WHERE T.persID = P.persID adalah penting untuk memadankan baris dengan betul antara pernyataan UPDATE utama dan subkueri.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Anda tidak boleh menentukan jadual sasaran untuk kemas kini dalam klausa FROM' MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan