0

我有以下两个查询都相同,但仅在结构上有所不同。

第一个查询:

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

问题:

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

4

2 回答 2

1

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

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

还有一点,如果你有一个user_id除了username,比较user_idwhere 子句中的 s 会更快。

于 2013-01-07T07:22:23.887 回答
0

sql: `amount` java: `amount'

有差异,...

于 2013-01-07T07:25:26.187 回答