我在我的SQL查询结果中编写了一个新字段(即距离),并希望将其(即距离)用作过滤我的查询的条件。
SELECT status, id, location, ABS(location - (100)) as distance FROM mytable WHERE ( status='approved' AND distance < '0.1') ORDER BY distance ASC
我可以使用它(即距离)进行排序,但当放入WHERE方面时,它会投诉
解决此问题的最佳解决方法是什么(即我仍然希望按距离过滤)。感谢。
答案 0 :(得分:4)
两种常见的解决方案:
选项1:添加条件而不是别名。希望查询优化器只计算一次。
SELECT status, id, location, ABS(location - (100)) as distance
FROM mytable
WHERE status='approved' AND ABS(location - (100)) < '0.1'
选项2:进行子选择并使用外部选择中的别名。
SELECT * FROM
(SELECT status, id, location, ABS(location - (100)) as distance
FROM mytable) x
WHERE status='approved' AND distance < '0.1'
还有三分之一可能也有效,而且它使用HAVING
代替WHERE
。 HAVING
稍后应用(在聚合之后),因此允许使用别名。通常HAVING
与GROUP BY
一起使用,因此当您稍后需要查看此查询时,单独使用它可能会造成混淆,因此我建议使用其他两个选项之一。
SELECT status, id, location, ABS(location - (100)) as distance
FROM mytable
HAVING status='approved' AND distance < '0.1'
答案 1 :(得分:1)
实际上你不能像这样使用它,而是像这样试试
SELECT status, id, location, ABS(location - (100)) as distance FROM mytable WHERE ( status='approved' AND ABS(location - (100)) < 0.1) ORDER BY distance ASC