【问题标题】:Incorrect Query错误查询
【发布时间】:2012-12-20 21:32:10
【问题描述】:

我有以下两个查询都是相同的,但只是结构不同。

第一个查询:

SELECT DISTINCT 
    u.username, r.value, u.amount AS `amount`
FROM 
    Daily_Balance_Updates u
INNER JOIN 
    Role r ON u.role_id = r.id
WHERE 
    u.updated_at = (SELECT MAX(inner_u.updated_at)
                    FROM Daily_Balance_Updates AS inner_u
                    WHERE inner_u.username = u.username
                       && amount > 0
                       && UNIX_TIMESTAMP( inner_u.updated_at ) < UNIX_TIMESTAMP( '2013-1-3 23:59:59' )
)
ORDER BY 
    r.value, UNIX_TIMESTAMP( u.updated_at ) DESC

Phpmyadmin 中运行良好

第二次查询

当我在 Java 中使用相同的查询时,我声明如下:

query="SELECT DISTINCT u.username, r.value, u.amount AS `amount' FROM Daily_Balance_Updates     u INNER JOIN Role r ON u.role_id = r.id WHERE u.updated_at = ("
+ "SELECT MAX(inner_u.updated_at) FROM Daily_Balance_Updates AS inner_u WHERE inner_u.username = u.username && amount > 0 && UNIX_TIMESTAMP( inner_u.updated_at ) < UNIX_TIMESTAMP('" +date+" 23:59:59' )) ORDER BY r.value DESC,UNIX_TIMESTAMP( u.updated_at )"

但是当我执行它时 phpmyadminjava

都会出错

错误

字段列表中的未知表“u”

我的日志:

12:23:17,963 INFO  [STDOUT] 2013-01-07 12:23:17,962 ERROR 
    com.walletplus.report.dao.ReportDaoMysql -  Thread #98  - 
    StatementCallback; bad SQL grammar 
        [SELECT DISTINCT u.username, r.value, u.amount AS `amount' FROM 
            Daily_Balance_Updates u INNER JOIN Role r ON u.role_id = r.id   
            WHERE u.updated_at = (SELECT MAX(inner_u.updated_at) FROM
            Daily_Balance_Updates AS inner_u WHERE inner_u.username = u.username    
            && amount > 0 && UNIX_TIMESTAMP( inner_u.updated_at ) < 
            UNIX_TIMESTAMP('2013-01-01 23:59:59' )) ORDER BY r.value DESC]; 
            nested exception is java.sql.SQLException: Unknown table 'u' in field list

问题:

查询有什么问题?好像没问题。

【问题讨论】:

  • 错误的单引号 - `amount'
  • 告诉我这个查询的输出是什么SELECT DISTINCT u.username FROM Daily_Balance_Updates u WHERE u.updated_at = ( SELECT MAX(inner_u.updated_at) FROM Daily_Balance_Updates AS inner_u WHERE inner_u.username= u.username )
  • 您没有将“u”正确定义为别名。如果“u”实际上是您的表名,您应该将其更改为更有意义的表名。除此之外,请确保您拥有正确的别名。
  • @Sahal 我猜对了,问题出在数量上……谢谢

标签: java mysql phpmyadmin


【解决方案1】:

这两个查询有两个不同之处

  • `amount` 与 `amount',两个引号都必须是 反引号
    我想,这就是为什么 FROM Daily_Balance_Updates u 无法识别的原因,您会收到误导性错误消息。
  • order by ... desc, ...order by ..., ... desc

另外一点,如果除了username 之外还有user_id,比较where 子句中的user_ids 会更快。

【讨论】:

    【解决方案2】:

    sql: `金额` 爪哇: `金额'

    有差异,...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 2015-08-18
      相关资源
      最近更新 更多