Rumah > pangkalan data > tutorial mysql > Mengapa Gabungan Tersurat dan Tersirat Menyebabkan Ralat SQL?

Mengapa Gabungan Tersurat dan Tersirat Menyebabkan Ralat SQL?

Mary-Kate Olsen
Lepaskan: 2025-01-14 19:41:45
asal
576 orang telah melayarinya

Why Do Explicit and Implicit JOINs Cause SQL Errors?

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:

SELECT e1.name, 
       e2.name, 
       e1Manager.name
  FROM Employee e1,
       Employee e2
 INNER JOIN Employee e1Manager 
    ON e1.managerEmployeeID = e1Manager.employeeID
Salin selepas log masuk

Pertanyaan ini menghasilkan ralat dalam kedua-dua MSSQL 2000/2008 dan MySQL:

  • MSSQL 2000: "Awalan lajur 'e1' tidak sepadan dengan nama jadual atau nama alias yang digunakan dalam pertanyaan."
  • MySQL: "Lajur 'e1.managerEmployeeID' tidak diketahui dalam 'pada klausa'."

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!

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