*Menyelesaikan masalah "ORA-00918: lajur ditakrifkan secara samar-samar" dalam PILIH Pertanyaan**
Ralat "ORA-00918: lajur ditakrifkan secara samar-samar" biasanya timbul apabila menjalankan SELECT *
pertanyaan terhadap berbilang jadual bercantum yang mengandungi lajur dengan nama yang sama. Enjin pangkalan data Oracle tidak dapat menentukan lajur yang anda ingin dapatkan semula apabila berbilang jadual berkongsi nama lajur.
Contoh Ilustrasi dan Penyelesaian
Pertimbangkan pertanyaan SQL ini:
<code class="language-sql">SELECT * FROM (SELECT DISTINCT(coaches.id), people.*, users.*, coaches.* FROM COACHES INNER JOIN people ON people.id = coaches.person_id INNER JOIN users ON coaches.person_id = users.person_id LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id ) WHERE rownum <= 25</code>
Pertanyaan ini menghasilkan ralat kerana berbilang jadual ( coaches
, people
, users
) mengandungi lajur bernama "id".
Untuk membetulkan ini, elakkan menggunakan SELECT *
. Sebaliknya, nyatakan secara eksplisit lajur yang anda perlukan:
Kaedah 1: Pemilihan Lajur Terus
Kaedah ini memilih secara langsung lajur yang diingini mengikut nama mereka yang layak sepenuhnya (jadual.lajur):
<code class="language-sql">SELECT coaches.id, people.name, users.username, coaches.title FROM COACHES INNER JOIN people ON people.id = coaches.person_id INNER JOIN users ON coaches.person_id = users.person_id LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id WHERE rownum <= 25</code>
Kaedah 2: Menggunakan Alias Lajur
Pendekatan ini memberikan alias unik kepada lajur dengan nama pendua. Ini menjadikan lajur yang dipilih tidak jelas:
<code class="language-sql">SELECT coaches.id AS coach_id, people.name AS person_name, users.username AS user_username, coaches.title AS coach_title FROM COACHES INNER JOIN people ON people.id = coaches.person_id INNER JOIN users ON coaches.person_id = users.person_id LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id WHERE rownum <= 25</code>
Dengan menggunakan salah satu daripada kaedah ini, kekaburan akan dialih keluar dan pertanyaan akan dilaksanakan dengan jayanya. Sentiasa memilih pilihan lajur eksplisit daripada SELECT *
dalam pertanyaan yang melibatkan gabungan untuk mengelakkan ralat biasa ini dan meningkatkan kebolehbacaan dan kebolehselenggaraan pertanyaan.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan 'ORA-00918: lajur ditakrifkan secara samar-samar' dalam SELECT * Pertanyaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!