Rumah >pangkalan data >tutorial mysql >Bolehkah saya Menggunakan Alias ​​Lajur dalam Klausa WHERE?

Bolehkah saya Menggunakan Alias ​​Lajur dalam Klausa WHERE?

Barbara Streisand
Barbara Streisandasal
2025-01-21 17:37:09663semak imbas

Can I Use Column Aliases in a WHERE Clause?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn