SQL WHERE 子句與計算的 SELECT 子句值:實用指南
直接引用 SQL 查詢的 WHERE 子句中的 SELECT 語句中定義的別名通常會導致錯誤。 這是由於計算順序造成的:SELECT 子句在 WHERE 子句
之後處理。考慮這個有問題的例子:
<code class="language-sql">SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue FROM Invoices WHERE BalanceDue > 0;</code>
BalanceDue
此查詢將會失敗,因為在計算 WHERE
子句時
這裡有兩個有效的解決方案:
1。使用子查詢:
此方法使用子查詢來預先計算值,使其可以在外部查詢的 WHERE 子句中使用:
<code class="language-sql">SELECT BalanceDue FROM ( SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue FROM Invoices ) AS sub WHERE BalanceDue > 0;</code>
BalanceDue
內部查詢計算
2。 WHERE 子句中的冗餘計算:
或者,您可以直接在 WHERE 子句中重複計算:
<code class="language-sql">SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue FROM Invoices WHERE (InvoiceTotal - PaymentTotal - CreditTotal) > 0;</code>
雖然更簡單,但此方法可能會導致非常複雜的計算的效能問題,因為表達式會被計算兩次。
效能最佳化:
WHERE
像 SQL Server 這樣的現代資料庫系統經常最佳化查詢,即使重複引用也只執行一次複雜的計算。但是,對於極其複雜或效能敏感的計算,應避免在
對於經常使用的計算值,建立計算列是更有效的長期解決方案。 這會持久儲存運算值,從而顯著提高查詢效能。
以上是如何在 SQL 的 WHERE 子句中引用計算的 SELECT 子句值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!