42

由于您不能在 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)”每行执行一次还是两次?有没有办法让它更快?我觉得很奇怪可以在列上排序但没有WHERE-条款。

4

2 回答 2

81

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

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

请注意,您需要n在 SELECT 子句中包含此功能。

于 2013-04-17T19:37:59.167 回答
4

你可以这样做:

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

但我不确定它可能对性能产生什么影响。

于 2013-04-17T19:40:35.750 回答