Memahami Ralat "Lajur Tidak Wujud" dalam Postgresql
Apabila cuba melaksanakan pertanyaan Postgresql yang kelihatan mudah, pengguna mungkin menghadapi ralat mendakwa bahawa lajur yang ditentukan tidak wujud. Ini boleh membingungkan, terutamanya apabila lajur yang dipersoalkan diketahui terdapat dalam pangkalan data.
Menyiasat Isu
Pertanyaan biasa yang mencetuskan ralat ini menyerupai berikut:
SELECT * FROM employee WHERE "lName" LIKE "Smith"
Walau bagaimanapun, mesej ralat menunjukkan bahawa lajur "Smith" tidak wujud, iaitu membingungkan kerana nama lajur sebenar ialah "lName".
Punca Ralat
Ralat berpunca daripada salah faham tentang cara Postgresql mentafsir petikan berganda ("") dalam pernyataan SQL. Dalam Postgresql, petikan berganda melampirkan pengecam yang disebut, yang merujuk kepada objek pangkalan data seperti nama jadual dan nama lajur. Walau bagaimanapun, dalam kes ini, petikan berganda di sekitar "Smith" sebaliknya mencipta pemalar rentetan.
Membetulkan Pertanyaan
Untuk membetulkan isu, pertanyaan harus diubah suai untuk memetik nama lajur "lName" dengan betul:
SELECT * FROM employee WHERE "lName" LIKE 'Smith'
Di sini, petikan tunggal (') digunakan untuk sertakan nilai 'Smith', mencipta rentetan literal untuk perbandingan.
Pertimbangan Tambahan
Selain daripada memetik, satu lagi punca kekeliruan yang berpotensi ialah kad bebas yang hilang dalam LIKE perbandingan. Biasanya, operasi LIKE termasuk aksara kad bebas (%) untuk memadankan sebarang bilangan aksara. Dalam pertanyaan ini, mungkin lebih sesuai untuk digunakan:
SELECT * FROM employee WHERE "lName" LIKE 'Smith%'
Ini memastikan baris di mana nilai dalam lajur "lName" bermula dengan 'Smith' akan disertakan dalam set hasil.
Atas ialah kandungan terperinci Mengapa Pertanyaan Postgresql Saya Mengembalikan Ralat 'Lajur Tidak Wujud' Walaupun Lajur Wujud?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!