0

良い一日。テーブル内の重複する行を削除するクエリが Java コードに含まれています。最初はうまくいきましたが、しばらくの間、私はプロジェクトに触れませんでした。しかし、数日前にファイルを実行すると、私のコードは例外をスローしていました。これは私のコードです:

String query = "DELETE error_log FROM error_log INNER JOIN "
                + "(SELECT  min(id) minid, service_source, channel,transaction_type, provider_name,     pido_account, beneficiary_id, error_description, error_date FROM error_log "
                + "GROUP BY service_source, channel, transaction_type, provider_name, pido_account, beneficiary_id, error_description, error_date "
                + "HAVING COUNT(1) > 1 AS duplicates ON "
                        + "(duplicates.service_source = error_log.service_source AND duplicates.channel = error_log.channel "
                    + "AND duplicates.transaction_type = error_log.transaction_type AND duplicates.provider_name = error_log.provider_name "
                    + "AND duplicates.pido_account = error_log.pido_account AND duplicates.beneficiary_id = error_log.beneficiary_id "
                    + "AND duplicates.error_description = error_log.error_description AND duplicates.error_date = error_log.error_date "
                    + "AND duplicates.minid <> error_log.id"
                        + ")"
                    + ")";

        int deploy = duplicate.executeUpdate(query);

私は後でこれを取得します:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: SQL 構文にエラーがあります。1 行目の「AS duplicates ON (duplicates.service_source = error_log.service_source AND dupli」の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

これを修正して重複をテーブルから削除するにはどうすればよいですか?

4

1 に答える 1

0

)行に欠落が あり、最後に+ "HAVING COUNT(1) > 1 AS duplicates ON "余分があります。)

String query = "DELETE error_log FROM error_log INNER JOIN "
                + "(SELECT  min(id) minid, service_source, channel,transaction_type, provider_name,     pido_account, beneficiary_id, error_description, error_date FROM error_log "
                + "GROUP BY service_source, channel, transaction_type, provider_name, pido_account, beneficiary_id, error_description, error_date "
                + "HAVING COUNT(1) > 1 ) AS duplicates ON "
                        + "(duplicates.service_source = error_log.service_source AND duplicates.channel = error_log.channel "
                    + "AND duplicates.transaction_type = error_log.transaction_type AND duplicates.provider_name = error_log.provider_name "
                    + "AND duplicates.pido_account = error_log.pido_account AND duplicates.beneficiary_id = error_log.beneficiary_id "
                    + "AND duplicates.error_description = error_log.error_description AND duplicates.error_date = error_log.error_date "
                    + "AND duplicates.minid <> error_log.id"
                    + ")";

        int deploy = duplicate.executeUpdate(query);

変更を加えていないのに機能しなくなった場合は、1) このコードをテストしましたか? 2) 他の誰かがあなたの知らないうちに変更を加えましたか?

于 2013-09-11T16:10:08.197 に答える