У меня чуть ниже базы кода, и она работает отлично вручную. Но выдает исключение, когда я использовал его в драйвере 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)
Любые вести?
Я не знаю ваших данных или точной логики, но я могу предложить использовать логику 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
соответствовал любой группе, вышеуказанная логика должна быть правильной.
Поскольку ошибка, безусловно, показывает нам, что число возвращаемых строк несколько, вы должны изменить test_id <>
на test_id not in
наложить следующую часть в paranthesis.