使用数学运算符在 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;
保留字列表是here。 Before
用于触发器的定义(可能还有其他地方)。
编辑:
对于你的第二个问题,如果你真的想要,你可以使用 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 的结果?
这是我的 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;
保留字列表是here。 Before
用于触发器的定义(可能还有其他地方)。
编辑:
对于你的第二个问题,如果你真的想要,你可以使用 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 的结果?