Пытаюсь удалить из таблицы записи-дубликаты.
У них совпадающее с некоторой другой записью значение в колонке order_id, но свой уникальный id - так я их (записи-дубликаты) распознаю.
Пишу запрос такого вида:
DELETE
FROM cl_purchases
WHERE point IN ( 600258 )
AND date LIKE '2020-03-%'
AND order_type = 'delivery'
GROUP BY order_id
HAVING COUNT( id ) > 1
AND provider <> 'iikodelivery'
База исполнять отказывается, пишет ошибку:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY order_id HAVING COUNT( id ) > 1 AND provider <> 'iikodelivery'' at line 6
Зато берёт в работу запрос вот такого неуклюжего вида:
DELETE
FROM cl_purchases
WHERE id IN
(
SELECT `non`.id
FROM
(
SELECT *
FROM cl_purchases
WHERE point IN ( 600258 )
AND date LIKE '2020-03-%'
AND order_type = 'delivery'
GROUP BY order_id
HAVING COUNT( id ) > 1
AND provider <> 'iikodelivery'
) AS `non`
)
Там, правда, возникает новая ошибка (
#1205 - Lock wait timeout exceeded; try restarting transaction
), но это, как я понимаю, уже другая проблема.
Вопросы:
- правильно ли я понимаю, что конструкция GROUP BY запрещена для непосредственного использования в WHERE-условии при DELETE-запросе?
- если да, то где про это почитать?
- нормально ли я обошёл проблему в своём запросе или надо как-то элегантнее?