0

次の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 )"

しかし、実行すると、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

これら2つのクエリには2つの違いがあります

  • 「amount」と「amount」、どちらの引用符もバッククォートにする必要があります。が認識されず、誤解を招くエラー メッセージが表示さ
    れるのはそのためだと思います。FROM Daily_Balance_Updates u
  • order by ... desc, ...order by ..., ... desc

もう 1 つのポイントは、user_idに加えてがある場合、 where 句で s をusername比較する方が高速です。user_id

于 2013-01-07T07:22:23.887 に答える
0

sql: `金額` java: `金額'

違いがあります...

于 2013-01-07T07:25:26.187 に答える