Apabila mengemas kini data dalam MySQL, selalunya perlu untuk merujuk nilai daripada jadual lain menggunakan subquery. Walau bagaimanapun, ralat boleh berlaku apabila subkueri tidak berkaitan dengan betul dengan pernyataan kemas kini luar.
Pertimbangkan pertanyaan berikut:
Update Competition Set Competition.NumberOfTeams = ( SELECT count(*) as NumberOfTeams FROM PicksPoints where UserCompetitionID is not NULL group by CompetitionID ) a where a.CompetitionID = Competition.CompetitionID
Pertanyaan ini gagal dengan mesej ralat:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a where a.CompetitionID = Competition.CompetitionID' at line 8
Ralat timbul kerana subkueri dalam tidak berkaitan dengan klausa where pada pernyataan kemas kini luar. Syarat di mana digunakan pada jadual sasaran (Persaingan) sebelum subquery dilaksanakan. Untuk menyelesaikan isu ini, kemas kini berbilang jadual boleh digunakan:
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
Kemas kini berbilang jadual ini dengan betul menyertai jadual Pertandingan (disebut sebagai C) dengan subkueri (disebut sebagai A), memastikan bahawa nilai subquery tersedia untuk penapisan dalam pernyataan kemas kini luar.
Untuk demonstrasi langsung pertanyaan yang diperbetulkan, rujuk SQL Fiddle berikut: http://www.sqlfiddle.com/#!2/a74f3/ 1
Atas ialah kandungan terperinci Bagaimana Menggunakan Subqueries dengan Benar dalam Pernyataan Kemas Kini MySQL untuk Mengelakkan Ralat Sintaks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!