PostgreSQL Case-Sensitivity dan Ralat Pertanyaan SQL: "lajur ... tidak wujud"
Melaksanakan gabungan SQL kadangkala boleh mengakibatkan ralat "kolum 'nama_lajur' tidak wujud" yang mengecewakan. Ini selalunya berpunca daripada ketidakpadanan sekiranya antara nama lajur dalam pertanyaan anda dan nama sensitif huruf besar yang sebenar yang ditakrifkan dalam skema pangkalan data. PostgreSQL, tidak seperti beberapa sistem pangkalan data lain, amat sensitif terhadap perkara ini.
Masalahnya:
Pertimbangkan pertanyaan yang gagal ini:
<code class="language-sql">select sim.id as idsim, num.id as idnum from main_sim sim left join main_number num on (FK_Numbers_id=num.id);</code>
Mesej ralat menghala ke lajur "FK_Numbers_id" yang tidak wujud dalam jadual main_sim
.
Penyelesaian:
Lajur ada wujud, tetapi penggunaan huruf besar yang betul adalah penting. Sifat sensitif huruf besar PostgreSQL memerlukan padanan yang tepat. Pertanyaan yang diperbetulkan ialah:
<code class="language-sql">select sim.id as idsim, num.id as idnum from main_sim sim left join main_number num on ("FK_Numbers_id" = num.id);</code>
Mengapa Ini Berfungsi:
Melampirkan nama lajur "FK_Numbers_id"
dalam petikan berganda memaksa PostgreSQL untuk merawatnya secara literal, tanpa mengira kes. Tanpa petikan, PostgreSQL mentafsir nama lajur mengikut peraturan kes lalainya, yang membawa kepada ralat. Menggunakan petikan berganda memastikan padanan tepat dengan definisi skema pangkalan data.
Atas ialah kandungan terperinci Mengapa Pertanyaan SQL Saya Gagal dengan 'lajur ... tidak wujud' Kerana Sensitiviti Kes?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!