次の2つのクエリはどちらも同じですが、構造のみが異なります。
最初のクエリ:
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で正常に動作します
2番目のクエリ
そして、私が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
質問:
クエリの何が問題になっていますか?大丈夫そうです。