Ошибка удаления MYSQL через JDBC и ответ об ошибке

0

У меня чуть ниже базы кода, и она работает отлично вручную. Но выдает исключение, когда я использовал его в драйвере 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:3973) на com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) в com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) в com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)

Любые вести?

  • 1
    Разве исключение само по себе не ясно: «Подзапрос возвращает более 1 строки» ??
  • 0
    Вы пытались запустить подзапрос отдельно. Какой результат это дает?
Показать ещё 4 комментария
Теги:
jdbc

2 ответа

1
Лучший ответ

Я не знаю ваших данных или точной логики, но я могу предложить использовать логику 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 соответствовал любой группе, вышеуказанная логика должна быть правильной.

  • 0
    Это работает как шарм. Благодарю.
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню