Bagaimana untuk Menyelesaikan Ralat 'Jadual Ditentukan Dua Kali' dalam MySQL Apabila Menggunakan Subqueries?

Mary-Kate Olsen
Lepaskan: 2024-11-12 15:02:02
asal
458 orang telah melayarinya

How to Resolve the

MySQL Ralat: Jadual Ditentukan Dua Kali

Apabila cuba mengemas kini jadual sambil turut menggunakannya sebagai sumber data, MySQL mungkin mengeluarkan ralat menunjukkan bahawa jadual ditentukan dua kali. Ini biasanya berlaku apabila menggunakan subkueri dengan pengalian jadual.

Sebagai contoh, pertimbangkan pertanyaan berikut:

UPDATE manager AS m1
SET m1.status = 'Y'
WHERE m1.branch_id IN (
  SELECT m2.branch_id
  FROM manager AS m2
  WHERE (m2.branch_id, m2.year) IN (
    SELECT DISTINCT branch_id, year
    FROM branch_master
    WHERE type = 'finance'
  )
);
Salin selepas log masuk

Pertanyaan ini cuba mengemas kini jadual pengurus berdasarkan subkueri yang menyemak sama ada medan tertentu dalam nilai padanan pengurus daripada jadual branch_master di mana jenisnya ialah 'kewangan'. Walau bagaimanapun, MySQL membantah fakta bahawa jadual pengurus digunakan sebagai sasaran (dalam klausa KEMASKINI) dan sebagai sumber data (dalam subkueri).

Untuk menyelesaikan isu ini dan menghalang "Jadual ialah dinyatakan ralat dua kali", kita boleh menggunakan jadual terbitan untuk subquery. Ini melibatkan mencipta jadual sementara berdasarkan jadual asal, kemudian memilih daripada jadual terbitan itu:

FROM (SELECT * FROM manager) AS m2
Salin selepas log masuk

Dengan melampirkan jadual pengurus asal dalam kurungan dan mengalikan hasilnya sebagai m2, kami mencipta jadual terbitan baharu. Ini membolehkan kami memilih data daripada jadual pengurus tanpa menyatakan secara eksplisit nama pengurus dua kali.

Pertanyaan Kemas Kini:

UPDATE manager
SET status = 'Y'
WHERE branch_id IN (
  SELECT branch_id
  FROM (SELECT * FROM manager) AS m2
  WHERE (m2.branch_id, m2.year) IN (
    SELECT branch_id, year
    FROM branch_master
    WHERE type = 'finance'
  )
);
Salin selepas log masuk

Pertanyaan yang dikemas kini ini dengan betul menggunakan jadual terbitan untuk subkueri, menyelesaikan Ralat "Jadual ditentukan dua kali" dan membenarkan pertanyaan untuk dilaksanakan dengan jayanya.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Jadual Ditentukan Dua Kali' dalam MySQL Apabila Menggunakan Subqueries?. 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