Apabila cuba menggunakan alias dalam klausa ORDER BY pertanyaan PostgreSQL, sesetengah pengguna menghadapi ralat, "column tidak wujud."
Pertimbangkan contoh berikut:
SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY global_stock = 0, title;
Menjalankan pertanyaan ini dalam PostgreSQL 8.1.23 menghasilkan ralat: "lajur 'global_stock' tidak wujud." Ralat ini berlaku kerana alias tidak dikenali dalam klausa ORDER BY.
Terdapat dua penyelesaian yang mungkin:
1. Susunan Berangka:
Daripada menggunakan alias, anda boleh merujuk lajur mengikut kedudukannya dalam klausa SELECT. Dalam contoh di atas, alias 'global_stock' sepadan dengan lajur 2. Oleh itu, pertanyaan yang diubah suai ialah:
SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY 2, 1;
2. Subkueri dengan Ungkapan CASE:
Pilihan lain ialah menggunakan subkueri dan ungkapan CASE:
SELECT * FROM ( SELECT title, (stock_one + stock_two) AS global_stock FROM product ) x ORDER BY (CASE WHEN global_stock = 0 THEN 1 ELSE 0 END) DESC, title;
Dalam kes ini, ungkapan CASE memberikan nilai 1 kepada baris dengan 'global_stock' = 0, dan 0 kepada semua yang lain. Pertanyaan kemudiannya mengisih hasil dalam tertib menurun berdasarkan nilai ini, dengan berkesan mengutamakan item yang tersedia.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Alias dalam ORDER PostgreSQL BY Klausa Tanpa Mendapat Ralat 'lajur tidak wujud'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!