Rumah >pangkalan data >tutorial mysql >Bolehkah saya Menggunakan Alias Lajur dalam Klausa WHERE?
Rujuk alias lajur dalam klausa WHERE
Pertanyaan SQL berikut menggunakan alias lajur dalam klausa WHERE:
<code class="language-sql">SELECT logcount, logUserID, maxlogtm , DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary WHERE daysdiff > 120</code>
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:
<code class="language-sql">SELECT * FROM ( SELECT logcount, logUserID, maxlogtm, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary ) as innerTable WHERE daysdiff > 120</code>
Kaedah 2: Gunakan CTE
Sebagai alternatif, anda boleh menggunakan CTE seperti dalam contoh di bawah:
<code class="language-sql">WITH CTE AS ( SELECT logcount, logUserID, maxlogtm, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary ) SELECT * FROM CTE WHERE daysdiff > 120</code>
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!