Итак, я продолжаю продолжать попытки сделать итоговое удаление записей из

базы.

Для этого я пытаюсь поочередно удалять сначала самые дочерние записи, и дальше выше по иерархи

я имею следующую структуру:

Есть канал, у канала есть "беседы", у бесед есть сообщения. Связь один ко многим от каналов к беседам и от бесед к сообщениям беседы

Записей в таблицах дофига и больше (по 10-100млн), поэтому хочется делать это максимально эффективно

Ну я человек простой, надо удалить связанные записи - делаем

DELETE
FROM `conversation_messages`
INNER JOIN `conversations` ON `conversations`.`id` = `conversation_messages`.`conversation_id`
WHERE `conversations`.`channel_id` = ?
LIMIT 300

Запускаем, радуемся. Успешно удалено 725 записей.... Что? 725?!
Идем читать документацию - видим, что лимит не работает для мультитабличного удаления

Ну я человек простой, не умеешь так - завернем это в подзапрос, скормим отдельному запросу на удаление через

DELETE FROM `conversation_messages` WHERE `id` in (
SELECT `conversation_messages`.`id` as `id`
FROM `conversation_messages`
INNER JOIN `conversations` ON `conversations`.`id` = `conversation_messages`.`conversation_id`
WHERE `conversations`.`channel_id` = ?
LIMIT 300
)

С довольной физиономией берем в левую руку кружечку кофЭ, правой запускаем запрос..
Бац, - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery

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

SELECT * FROM `conversation_messages` INNER JOIN (SELECT `conversation_messages`.`id` as `id`
FROM `conversation_messages`
INNER JOIN `conversations` ON `conversations`.`id` = `conversation_messages`.`conversation_id`
WHERE `conversations`.`channel_id` = ?
LIMIT 300) as sub
ON `sub`.`id` = `conversation_messages`.`id`


(Да, это селект). Запускаем - работает. Радуемся, тянем левую руку к кофЭ, правой рукой меняем селект на DELETE.

Запускаем - Бац! unexcepted keyword около inner join, иди думай дальше.


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

В какой момент что-то пошло не так? Почему ему не нравится финальный запрос, если для селекта работает?

Я грешным делом уже думаю в коде приложения отдельно выгребать айдишники, отдельно скидывать их в удаление. По идее это х2 к количеству запросов, но в рамках бреда, при работе с репликами этот подход может оказаться даже эффективнее (но это не точно)

2 ответов

11 просмотров

Он ждёт "Delete имя-таблицы from ... "

Watch-This Автор вопроса
allpeg
Он ждёт "Delete имя-таблицы from ... "

и действительно, работает, спасибо большое!

Похожие вопросы

Обсуждают сегодня

Всем привет, Добавил в плагин определение user agent public function registerMarkupTags() { return [ 'filters' => [ 'staticPage' => ['RainLab\Pages\Cl...
John Norton Kruger
3
Я колись ставив гуглу антиспам 3.0, може і норм, але мені не дуже зайшло. Теж думав тиждень, що його і куди. Зупинився на трех варіантах відразу всі три і включив 1. Перевір...
𝓔𝓾𝓰𝓮𝓷𝓮𝓥 J
2
Добрый день , слышали про то что XML схемы https://schemas.xmlsoap.org/soap/envelope/ перестали работать со поза-вчера. А домен https://schemas.xmlsoap.org/ , отвечает 404 оши...
Max Dubovsky
3
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
где собака, админ группы? нычкуется и боится проявить волю, в толерантность еще не наигрался? @yelizariev
Ognezar
61
Приветствую всех, возникла проблема, до этого писал бота в простом формате где при выполнении условий приходило через send_message информация, сейчас решил добавить хендлер на...
Andrew
4
Приветствую всех, есть вопросик. Передали проект на OctoberCms, без инсталяшки в полуразвернутом виде, нужно было залить бекап бд, после залития бд, оказалось, что части строк...
Лео
14
Ребят, привет. У кого-то есть опыт заказа мерча в сторе? Есть успешные кейсы? Чёт у меня турецкую карту не принимает
Vladimir F.
7
Всем привет, может уже кто-то пытался выдернуть из api информацию о дате рождения пользователя Есть ли вообще такая возможность?
Artem Stormageddon
2
Карта сайта