>我正在我的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 - "where 子句"中的未知列"距离"
解决此问题的最佳解决方法是什么(即我仍然想按距离过滤)。谢谢。
两种常见的解决方案:
选项 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'
其实你不能这样用,而是这样试试
SELECT status, id, location, ABS(location - (100)) as distance FROM mytable WHERE ( status='approved' AND ABS(location - (100)) < 0.1) ORDER BY distance ASC