SQL WHERE 子句和计算别名:常见问题
SQL 允许在 SELECT
语句中创建计算别名。 但是,在 WHERE
子句中直接引用这些别名通常会导致错误。在处理复杂的计算时,此限制可能会出现问题。
有效的解决方案
有几种方法可以规避此限制:
使用子查询:
将计算嵌套在子查询中,为计算的别名分配一个名称。 然后,在外部查询的 WHERE
子句中引用此名称。
示例:
<code class="language-sql">SELECT BalanceDue FROM ( SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue FROM Invoices ) AS x WHERE BalanceDue > 0;</code>
重复计算:
WHERE
子句中复制计算。<code class="language-sql"> SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue FROM Invoices WHERE (InvoiceTotal - PaymentTotal - CreditTotal) > 0;</code>
性能影响
虽然子查询很简单,但它们可能会导致性能下降。 相反,WHERE
子句中重复复杂的计算也会对性能产生负面影响。
最优策略
对于简单的计算,重复计算通常效率更高。 对于复杂的计算,建议创建持久计算列。这个预先计算的列避免了冗余计算并确保跨查询的数据一致性。
以上是为什么我不能在 SQL WHERE 子句中使用计算别名?的详细内容。更多信息请关注PHP中文网其他相关文章!