Rujuk alias lajur dalam klausa WHERE
Pertanyaan SQL berikut menggunakan alias lajur dalam klausa WHERE:
SELECT logcount, logUserID, maxlogtm , DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary WHERE daysdiff > 120
Melaksanakan pertanyaan ini akan mengakibatkan ralat: "Perbezaan hari nama lajur tidak sah". Ini kerana alias lajur seperti daysdiff biasanya tidak boleh diakses terus dalam klausa WHERE.
Untuk menyelesaikan masalah ini, kita boleh memaksa SQL untuk melaksanakan pernyataan SELECT dahulu dan kemudian klausa WHERE. Ini boleh dicapai dengan menggunakan kurungan atau ungkapan jadual biasa (CTE).
Kaedah 1: Gunakan kurungan
Dalam pertanyaan yang diubah suai di bawah, pernyataan SELECT disertakan dalam kurungan, memaksanya untuk dilaksanakan sebelum klausa WHERE:
SELECT * FROM ( SELECT logcount, logUserID, maxlogtm, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary ) as innerTable WHERE daysdiff > 120
Kaedah 2: Gunakan CTE
Sebagai alternatif, anda boleh menggunakan CTE seperti dalam contoh di bawah:
WITH CTE AS ( SELECT logcount, logUserID, maxlogtm, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary ) SELECT * FROM CTE WHERE daysdiff > 120
Dengan menggunakan kurungan atau CTE, anda boleh mengawal susunan logik operasi SQL, membolehkan anda merujuk alias lajur dalam klausa WHERE dan menyelesaikan ralat tersebut.
Atas ialah kandungan terperinci Bolehkah saya Menggunakan Alias Lajur dalam Klausa WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!