Java 通过JDBC删除MYSQL失败,返回错误响应

Java 通过JDBC删除MYSQL失败,返回错误响应,java,mysql,jdbc,Java,Mysql,Jdbc,我只有下面的代码库,它可以很好地手动工作。但当我在jdbc驱动程序中使用它时抛出异常 代码: 例外情况: java.sql.SQLException:子查询在 com.mysql.jdbc.SQLError.createSQLExceptionSQLError.java:964 at com.mysql.jdbc.MysqlIO.checkErrorPacketMysqlIO.java:3973 com.mysql.jdbc.MysqlIO.checkErrorPacketMysqlIO.jav

我只有下面的代码库,它可以很好地手动工作。但当我在jdbc驱动程序中使用它时抛出异常

代码:

例外情况:

java.sql.SQLException:子查询在 com.mysql.jdbc.SQLError.createSQLExceptionSQLError.java:964 at com.mysql.jdbc.MysqlIO.checkErrorPacketMysqlIO.java:3973 com.mysql.jdbc.MysqlIO.checkErrorPacketMysqlIO.java:3909 at com.mysql.jdbc.MysqlIO.sendCommandMysqlIO.java:2527 at com.mysql.jdbc.MysqlIO.sqlQueryDirectMysqlIO.java:2680


有线索吗?

我不知道您的数据或确切逻辑,但我可以建议在子查询中使用WHERE NOT IN logic,而不是:


这将绕过返回多个结果错误的子查询。通常,子查询将为每个测试返回一个最大值。因此,假设您的逻辑是不希望测试id与任何组匹配,那么上述逻辑应该是正确的。

因为错误明确地告诉我们返回的行数是多个,您应该将test\u id更改为test\u id not in,并将以下部分放入paradensis。

异常本身是否清楚:子查询返回的行数超过1行??您是否尝试单独运行子查询。它会产生什么结果?从测试中选择MAXtest\u id MAX\u TEST\u id,其中e2e\u product\u id=410按测试名称分组,计数*>1-此子查询返回多行如何解决此问题?@ArrchanaMohan它取决于您的预期逻辑。一个直接的解决办法是在测试id不在的地方使用。。。。
String query = "DELETE
                FROM tests
                WHERE e2e_product_id =410 AND
                      test_name = 'PWBAR-FullBalance-Auth-TC1' AND
                      test_id <> 
                    (SELECT MAX_TEST_ID FROM (SELECT MAX(test_id) MAX_TEST_ID
                     FROM tests WHERE e2e_product_id =410
                     GROUP BY test_name HAVING COUNT(*) > 1) TEMP)"
DELETE
FROM tests
WHERE
    e2e_product_id = 410 AND
    test_name = 'PWBAR-FullBalance-Auth-TC1' AND
    test_id NOT IN (
        SELECT MAX_TEST_ID
        FROM (
            SELECT MAX(test_id) MAX_TEST_ID
            FROM tests
            WHERE e2e_product_id = 410
            GROUP BY test_name
            HAVING COUNT(*) > 1
        ) t
    );