0

我正在尝试从如下所示的数据库表中进行选择...

id   | task         | last_run    | interval
 1   |  test-run    |  1369715091 |  30
 2   |  anothertask |  1369715091 |  60

last_run是 Unix 时间,由脚本在运行时更新。间隔是需要执行此任务的运行之间的时间。

我需要做的是运行一个查询,我只选择last_run+interval小于当前时间的任务。

这就是我想出的...

SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` WHERE (`next_run` > '1369717906')

...但是我得到了错误...

Unknown column 'next_run' in 'where clause'

你有什么想法?

4

4 回答 4

1

您可以在那里提供这两个名称而不是别名

SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` WHERE (`last_run`+`interval`)  > 1369717906

WHERE根据MySQL Docs,您不能在子句中使用别名

可以在查询选择列表中使用别名来为列指定不同的名称。您可以在 GROUP BY、ORDER BY 或 HAVING 子句中使用别名来引用列。标准 SQL 不允许在 WHERE 子句中引用列别名。施加此限制是因为在评估 WHERE 子句时,可能尚未确定列值

于 2013-05-28T05:27:30.147 回答
1

在查询中使用(last_run+interval)而不是。next_run

于 2013-05-28T05:27:51.440 回答
1

在 where 子句中,使用表达式而不是别名:

WHERE last_run + interval > 1369717906
于 2013-05-28T05:28:07.637 回答
1

据我所知,where子句不能使用别名

所以你有两个选择

要么重复 where 子句中的表达式

SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` WHERE (`last_run`+`interval`) > '1369717906'

或者使用havingwhich 可以使用别名

SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` HAVING (`next_run` > '1369717906')

MySQL 教程演示

于 2013-05-28T05:29:32.577 回答