如何将组合列添加到MySQL的WHERE条件中

时间:2015-01-17 10:20:14

标签: php mysql

我在我的SQL查询结果中编写了一个新字段(即距离),并希望将其(即距离)用作过滤我的查询的条件。

SELECT status, id, location, ABS(location - (100)) as distance FROM mytable WHERE ( status='approved' AND distance < '0.1') ORDER BY distance ASC

我可以使用它(即距离)进行排序,但当放入WHERE方面时,它会投诉

1054 - 未知列&#39;距离&#39;在&#39; where子句&#39;

解决此问题的最佳解决方法是什么(即我仍然希望按距离过滤)。感谢。

2 个答案:

答案 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代替WHEREHAVING稍后应用(在聚合之后),因此允许使用别名。通常HAVINGGROUP 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