Java 错误查询
我有以下两个查询,它们都是相同的,但只是在结构上不同 第一个问题:Java 错误查询,java,mysql,phpmyadmin,Java,Mysql,Phpmyadmin,我有以下两个查询,它们都是相同的,但只是在结构上不同 第一个问题: 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)
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”
我的日志:
问题:
查询有什么问题?看起来没问题。这两个查询有两个不同之处 `amount`vs`amount',两个引号必须为反勾号。 我猜,这就是原因,为什么从每日余额更新中你没有被识别,你会得到误导性的错误信息。 订购人。。。描述。。。vs订单由。。。描述 还有一点,如果您除了用户名之外还有一个用户id,那么比较where子句中的用户id会更快。sql: `数量` 爪哇: `金额'
存在差异,错误的单引号-`amount'告诉我此查询的输出是什么选择DISTINCT u.username FROM Daily\u Balance\u Updates u其中u.updated\u at=选择MAXinner\u u.updated\u at FROM Daily\u Balance\u Updates作为inner\u其中inner\u.username=u.username您没有正确定义u作为别名。如果u实际上是表的名称,则应将其更改为更有意义的表名。除此之外,确保你有正确的别名。@Sahal我猜对了问题出在数量上……谢谢
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