Menyelesaikan Masalah Pertanyaan Kemas Kini MySQL dengan Subkueri
Dalam pertanyaan kemas kini MySQL dengan subkueri, anda mungkin menghadapi ralat yang serupa dengan ini:
#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
Pertanyaan:
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
Isu:
Ralat timbul kerana klausa where di bahagian luar penyata kemas kini (di mana a.CompetitionID = Competition.CompetitionID) tidak boleh dipautkan kepada subquery dalaman. Penapis tempat digunakan pada jadual yang sedang dikemas kini (Persaingan) sebelum subquery dalam dilaksanakan.
Penyelesaian:
Untuk menyelesaikan isu ini, gunakan kemas kini berbilang jadual :
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
Penjelasan:
Pertanyaan ini menyertai jadual Pertandingan (disebut sebagai C) dengan subkueri (disebut sebagai A) yang mengira bilangan pasukan untuk setiap pertandingan. Syarat sertai adalah pada CompetitionID. Kemudian, penyata kemas kini menetapkan lajur NumberOfTeams dalam jadual Persaingan kepada nilai yang dikira daripada subkueri.
Demo:
Anda boleh mencuba pertanyaan yang dikemas kini ini pada SQL Fiddle : http://www.sqlfiddle.com/#!2/a74f3/1
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan \'Ralat #1064: Anda mempunyai ralat dalam sintaks SQL anda\' dalam Pertanyaan Kemas Kini MySQL dengan Subquery?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!