首頁 > 資料庫 > mysql教程 > 如何在 SQL 的 WHERE 子句中引用計算的 SELECT 子句值?

如何在 SQL 的 WHERE 子句中引用計算的 SELECT 子句值?

Patricia Arquette
發布: 2025-01-11 10:51:41
原創
443 人瀏覽過

How Can I Reference Calculated SELECT Clause Values in a WHERE Clause in SQL?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板