Ошибка удаления MYSQL через JDBC и ответ об ошибке - PullRequest
0 голосов
/ 21 сентября 2018

У меня просто ниже базы кода, и она отлично работает вручную.Но выдает исключение, когда я использовал его в драйвере jdbc.

Код:

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

Исключение:

java.sql.SQLException: подзапрос возвращает более 1 строки в com.mysql.jdbc.SQLError.createSQLException (SQLError.java:964) в com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:73)mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3909) по адресу com.mysql.jdbc.MysqlIO.sendCommand (MysqlIO.java:2527) по адресу com.mysql.jdbc.MysqlIO.sqlQueryIO.jysq180jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjljjj * 101 * * * 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101eryeryeryeryeryery:*

Есть ли отведения?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Поскольку ошибка определенно показывает нам, что возвращаемое количество строк кратно, вы должны изменить test_id <> на test_id not in и поместить следующую часть в парантез.

0 голосов
/ 21 сентября 2018

Я не знаю ваших данных или точной логики, но я могу предложить использовать WHERE NOT IN логику с подзапросом вместо <>:

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
    );

Это позволит обойти подзапрос, возвращающий болееодна ошибка результата.Как правило, ваш подзапрос будет возвращать одно максимальное значение для каждого теста.Итак, если ваша логика заключается в том, что вы не хотите, чтобы test_id соответствовала любой группе, приведенная выше логика должна быть правильной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...