SQL别名可以在ORDER BY子句中,但不在WHERE子句中?

时间:2015-10-28 10:17:10

标签: mysql

我在Spring Batch项目中用于JDBCPagingItemReader的查询是:

 SELECT
  account_login_log_id log_id,
  created_at reference_time 
 FROM account_login_log 
 WHERE account_login_log_id > 1000 
 ORDER BY account_login_log_id

RowMapper捕获从阅读器获取的项目并创建名为say,SomeGeneralLog的对象。

    SomeGeneralLog log = new SomeGeneralLog();
    log.setLogId(rs.getInt("log_id");
    log.setReferenceTime(rs.getTimestamp("reference_time");

并将此日志返回给编写器,就像某些批处理进程那样。

这就是重点。该程序抛出SQLException!     java.sql.SQLException:Column' account_login_log_id'没找到。

什么?我甚至没有找到专栏' account_login_log_id'在RowMapper代码中。 实际上,我可以通过用' log_id'替换ORDER BY子句中的列名来使它运行。但为什么?是什么原因?请尽可能多地做出任何记录。 (我怀疑查询中关键字的查询处理顺序。* ref:https://stackoverflow.com/a/31808872/3648833

感谢。

1 个答案:

答案 0 :(得分:1)

  

SELECT account_login_log_id log_id

您为该列添加了别名,因此现在它有一个新名称,您必须使用该新名称。

您的确切里程可能因RDBMS而异。