由于您不能在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条款。
答案 0 :(得分:47)
您可以使用HAVING过滤计算列:
SELECT a,b,c,(a*b+c) AS d, n FROM table
HAVING d > n
ORDER by d
请注意,您需要在SELECT子句中包含n
才能使其生效。
答案 1 :(得分:2)
你可以这样做:
SELECT a,b,c,d FROM
(SELECT a,b,c,(a*b+c) AS d) AS tmp
WHERE d > n
ORDER BY d
但我不确定它可能带来的性能影响。