SQL WHERE 子句與計算列:常見陷阱
SQL通常需要根據涉及列的計算來過濾數據,例如日期差異。 然而,直接在 WHERE
子句中使用列別名經常會導致「無效的列名」錯誤。這是因為 SQL 在 SELECT
子句之前處理 語句,這表示當 WHERE
子句嘗試使用別名時尚未定義它。 WHERE
<code class="language-sql">SELECT logcount, logUserID, maxlogtm, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary WHERE daysdiff > 120;</code>
這裡有兩個有效的解決方案:
1。 子查詢(或括號):預先計算值
將計算結果括在括號內以強制 SQL 首先對其進行計算:
<code class="language-sql">SELECT logcount, logUserID, maxlogtm, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary WHERE (DATEDIFF(day, maxlogtm, GETDATE()) > 120);</code>
可用於 daysdiff
子句。 WHERE
2。通用表格表達式 (CTE):定義臨時表
CTE 提供命名的臨時結果集,讓您更清晰地引用計算列:
<code class="language-sql">WITH logDiff AS ( SELECT logcount, logUserID, maxlogtm, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary ) SELECT logcount, logUserID, maxlogtm, daysdiff FROM logDiff WHERE daysdiff > 120;</code>
預先計算 logDiff
,使其可以在主查詢的 daysdiff
子句中存取。 這種方法提高了可讀性和可維護性,特別是對於更複雜的計算。 WHERE
以上是如何在 SQL WHERE 子句中使用計算列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!