Menyelesaikan Oracle ORA-00918: Ralat takrifan lajur yang tidak jelas
Adalah mengecewakan untuk menghadapi ralat ORA-00918 apabila menggunakan pernyataan SELECT *
. Ralat ini berlaku apabila lajur dengan nama yang sama muncul beberapa kali dalam set hasil dan Oracle tidak dapat menentukan lajur yang hendak diambil.
Pernyataan SQL berikut:
<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>
SELECT *
kerana terdapat berbilang lajur bernama ID dalam subkueri:
COACHES.ID
PEOPLE.ID
USERS.ID
Untuk menyelesaikan kekaburan ini, pertanyaan mesti memilih lajur bernama secara eksplisit. Adalah disyorkan untuk menggunakan alias lajur untuk meningkatkan kejelasan dan mengelakkan masalah apabila menambah atau menamakan semula lajur pada masa hadapan. Contohnya:
<code class="language-sql">SELECT COALESCE(COACHES.ID, PEOPLE.ID, USERS.ID) AS ID, people.*, users.*, coaches.*, organizations_users.* 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>
Pelarasan ini memastikan hanya terdapat satu contoh lajur ID dalam set hasil, menyelesaikan ralat ORA-00918 dan memastikan integriti data. COALESCE
Fungsi ini digunakan untuk mengendalikan situasi di mana nilai NULL mungkin wujud dan memilih nilai ID bukan NULL yang pertama. Walau bagaimanapun, penyelesaian yang lebih baik ialah dengan menyatakan semua lajur yang diperlukan secara eksplisit dan elakkan daripada menggunakan aksara *
kad bebas.
Atas ialah kandungan terperinci Mengapa Pertanyaan SELECT * Saya Menghasilkan ORA-00918: Ralat Takrif Lajur Kabur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!