Rumah >pangkalan data >tutorial mysql >Mengapa Gabungan Tersurat dan Tersirat Menyebabkan Ralat SQL?
Ralat SQL daripada Menggabungkan Gabungan Eksplisit dan Tersirat
Menggabungkan JOIN tersurat dan tersirat dalam satu pertanyaan SQL boleh membawa kepada ralat. Contoh berikut menggambarkan masalah ini:
<code class="language-sql">SELECT e1.name, e2.name, e1Manager.name FROM Employee e1, Employee e2 INNER JOIN Employee e1Manager ON e1.managerEmployeeID = e1Manager.employeeID</code>
Pertanyaan ini menghasilkan ralat dalam kedua-dua MSSQL 2000/2008 dan MySQL:
Memahami Isu Sintaks
Ralat berpunca daripada konflik keutamaan. Dalam SQL, kata kunci JOIN
diutamakan berbanding penyenaraian jadual yang dipisahkan koma dalam klausa FROM
. Alias e1
tidak dikenali dalam klausa ON
JOIN
kerana penghurai belum lagi memproses klausa FROM
sepenuhnya. Pada asasnya, e1
tidak ditentukan pada titik ia dirujuk dalam keadaan JOIN
.
Hibernate dan Sertai Sintaks
Terdapat isu yang diketahui dalam Hibernate berkenaan penjanaan SQL yang salah apabila mencampurkan JOIN tersurat dan tersirat. Walaupun memaksa Hibernate untuk menggunakan JOIN eksplisit secara eksklusif adalah penyelesaian yang berpotensi, butiran khusus untuk mencapainya pada masa ini tidak tersedia kerana pengehadan dalam dokumentasi HQL yang boleh diakses.
Atas ialah kandungan terperinci Mengapa Gabungan Tersurat dan Tersirat Menyebabkan Ralat SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!