В версиях MySQL, предшествующих 4.1, не поддерживаются подзапросы, а в версиях ниже 4.0 не поддерживается использование более чем одной таблицы в операторе DELETE.
Если установлена именно одна из упомянутых версий, удалить строки из двух связанных между собой таблиц можно с помощью следующего подхода:
1. В главной таблице выберите строки с помощью SELECT, основываясь на некотором условии WHERE.
2. Удалите строки с помощью DELETE из главной таблицы, основываясь на том же самом условии.
3. Удалите строки с помощью DELETE FROM связанная_таблица WHERE связанный_столбец IN {выбранные_строки}.
Если общая длина оператора для таблицы связанная_таблица превышает 1 Мбайт (значение системной переменной max_allowed_packet по умолчанию), необходимо разделить его на части поменьше и выполнить сразу несколько операторов DELETE.
Скорее всего, самый быстрый оператор DELETE получится при указании только от 100 до 1000 значений связанный_столбец в каждом таком операторе, если связанный_столбец проиндексирован.
Если столбец связанный_столбец не проиндексирован, скорость выполнения не будет зависеть от количества аргументов в конструкции IN.
Комментарии