一尘不染

计算子句中的列-性能

mysql

由于您不能在MySQL的where子句中使用计算列,如下所示:

SELECT a,b,c,(a*b+c) AS d FROM table
WHERE d > n
ORDER by d

你必须使用

SELECT a,b,c,(a*b+c) AS d FROM table
WHERE (a*b+c) > n
ORDER by d

计算(在该示例中,“(a * b + c)”是每行执行一次还是两次执行?有没有一种方法可以使速度更快?我觉得很奇怪,可以对列进行ORDER但没有WHERE-
条款。


阅读 239

收藏
2020-05-17

共1个答案

一尘不染

您可以使用HAVING来过滤计算列:

SELECT a,b,c,(a*b+c) AS d, n FROM table
HAVING d > n
ORDER by d

请注意,您需要将其包括n在SELECT子句中才能起作用。

2020-05-17