Rumah > pangkalan data > tutorial mysql > Mengapa Pertanyaan SELECT * Saya Menghasilkan ORA-00918: Ralat Takrif Lajur Kabur?

Mengapa Pertanyaan SELECT * Saya Menghasilkan ORA-00918: Ralat Takrif Lajur Kabur?

Linda Hamilton
Lepaskan: 2025-01-13 21:50:49
asal
303 orang telah melayarinya

Why Does My SELECT * Query Result in an ORA-00918: Ambiguous Column Definition Error?

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>
Salin selepas log masuk
Terdapat masalah dengan klausa

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan