使用数学运算符在 mysql 列上设置别名

setting alias on mysql columns with math operators

这是我的 sql 查询,我在 AS 语句中遇到错误。

select a.*, b.*, (a.date - b.date) AS before
from tbl A a join tbl B b
on a.id = b.id
where (a.date - b.date) < 5 and (a.date - b.date)  > 0;

如何使我的 SQL 查询像这样工作?

select a.*, b.*, (a.date - b.date) AS before
from tbl A a join tbl B b
on a.id = b.id
where before < 5 and before > 0;

before 是保留字。使用其他东西或使用反引号:

select a.*, b.*, (a.date - b.date) AS datediff
from tbl A a join
     tbl B b
     on a.id = b.id
where (a.date - b.date) < 5 and (a.date - b.date)  > 0;

保留字列表是hereBefore 用于触发器的定义(可能还有其他地方)。

编辑:

对于你的第二个问题,如果你真的想要,你可以使用 having 子句:

select a.*, b.*, (a.date - b.date) AS datediff
from tbl A a join
     tbl B b
     on a.id = b.id
having datediff < 5 and datediff > 0;

这是 having 的 MySQL 扩展。在不熟悉它的人看来真的很别扭(就是尖叫,"where is the group by")。但是,它可能很有用,特别是对于更长、更复杂的表达式。

可以看出几个问题: 1) 第一个查询...'before' 是一个保留字。您不能将其用作别名。给你的专栏起个别的名字。 2) 第二个查询...您将无法在同一个查询中引用别名。 3) 您正在寻找小于 5 且大于 0 的结果?