Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyelesaikan 'ORA-00918: lajur ditakrifkan secara samar-samar' dalam SELECT * Pertanyaan?

Bagaimana untuk Menyelesaikan 'ORA-00918: lajur ditakrifkan secara samar-samar' dalam SELECT * Pertanyaan?

DDD
Lepaskan: 2025-01-13 21:15:47
asal
477 orang telah melayarinya

How to Resolve

*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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan