比较'where'语句中'as'表达式的结果

时间:2008-12-02 17:02:39

标签: sql mysql

是否可以创建一个使用表达式作为x的MySQL select语句,然后检查x的值是否低于一定数量?

SELECT (mytable.field1 + 10) AS x FROM `mytable` WHERE x < 50;

3 个答案:

答案 0 :(得分:6)

不,你真的要这样做

SELECT (mytable.field1 + 10) AS x FROM `mytable` WHERE (mytable.field1 + 10) < 50;

答案 1 :(得分:5)

你也可以这样做:

SELECT *
FROM (
    SELECT (mytable.field1 + 10) AS X
    FROM `MyTable`
) t
WHERE X < 50

在大多数情况下,使用Nick的解决方案可能更好,因为它允许服务器在流程的早期应用where子句。但是,为了在复杂查询中清晰起见,有时您会想要这样做,其他因素正在推动性能。

答案 2 :(得分:0)

我将表达式存储在变量中并在多个位置插入它们:

$x_sql = '(mytable.field1 + 10)';
$SQL = "SELECT $x_sql AS x FROM mytable WHERE $x_sql < 50";

或者,如果您不为效率低下而烦恼,请使用HAVING子句:

SELECT (mytable.field1 + 10) as x FROM mytable HAVING x < 50;

(可能与另一个答案中建议的subselect效率相同)。