【发布时间】: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 )"
但是当我执行它时 phpmyadmin 和 java
都会出错错误
字段列表中的未知表“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