SQL WHERE 子句與計算列別名
通常不支援在 SQL WHERE 子句中直接使用計算列別名。 例如,此查詢將失敗:
<code class="language-sql">SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue FROM Invoices WHERE BalanceDue > 0; -- Error</code>
解:
兩種有效的方法可以規避此限制:
1。子查詢(巢狀查詢):
這種方法將計算封裝在子查詢中:
<code class="language-sql">SELECT BalanceDue FROM ( SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue FROM Invoices ) AS x WHERE BalanceDue > 0;</code>
2。表情重複:
或者,在 SELECT 和 WHERE 子句中複製計算:
<code class="language-sql">SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue FROM Invoices WHERE (InvoiceTotal - PaymentTotal - CreditTotal) > 0;</code>
效能注意事項:
雖然子查詢可能顯得效率較低,但 SQL Server 等現代資料庫系統通常可以有效地最佳化查詢。 兩種方法的執行計劃通常相同,表明性能相似。
進階最佳化:計算欄位
對於跨多個查詢重複使用的複雜計算,計算列提供了顯著的效能優勢。 這個預先計算的欄位簡化了查詢並減少了冗餘計算。以上是我可以在 SQL WHERE 子句中使用計算列別名嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!