Membetulkan Ralat dalam MySQL UPDATE Query dengan Subquery
Pertanyaan yang disediakan melibatkan pengemaskinian medan NumberOfTeams dalam jadual Pertandingan menggunakan subquery. Walau bagaimanapun, pengguna menghadapi ralat disebabkan isu sintaks.
Isunya terletak pada penggunaan alias (a) yang salah dalam klausa WHERE bagi pernyataan UPDATE. Dalam MySQL, alias hanya sah dalam skop subkueri itu sendiri. Oleh itu, merujuk alias a dalam klausa WHERE adalah tidak sah.
Penyelesaian menggunakan Kemas Kini Berbilang Jadual
Untuk membetulkan isu ini, kemas kini berbilang jadual boleh digunakan . Ini melibatkan penyertaan jadual Pertandingan dengan subkueri yang mengira bilangan pasukan untuk setiap pertandingan. Penyertaan dilakukan menggunakan lajur CompetitionID, dan nilai yang dikemas kini kemudian ditetapkan berdasarkan subkueri yang dicantumkan.
<code class="sql">UPDATE Competition AS C INNER JOIN ( SELECT CompetitionId, COUNT(*) AS NumberOfTeams FROM PicksPoints AS p WHERE UserCompetitionID IS NOT NULL GROUP BY CompetitionId ) AS A ON C.CompetitionID = A.CompetitionID SET C.NumberOfTeams = A.NumberOfTeams;</code>
Subkueri mengira bilangan pasukan untuk setiap pertandingan, yang kemudiannya digunakan untuk mengemas kini NumberOfTeams lajur dalam jadual Pertandingan utama. Kaedah ini memastikan bahawa hasil subkueri dirujuk dengan betul dalam logik kemas kini.
Contoh dan Demonstrasi
Demo bagi pertanyaan yang diperbetulkan ini boleh dilihat di http:// www.sqlfiddle.com/#!2/a74f3/1. Menjalankan pertanyaan ini akan berjaya mengemas kini jadual Pertandingan dengan bilangan pasukan yang betul untuk setiap pertandingan.
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Pertanyaan KEMASKINI MySQL dengan Ralat Subkueri: Isu Rujukan Alias?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!