As MySQL doesn't support sub-selects or use of more than one table
in the DELETE
statement, you should use the following approach to
delete rows from 2 related tables:
-
SELECT
the rows based on some WHERE
condition in the main table.
-
DELETE
the rows in the main table based on the same condition.
-
DELETE FROM related_table WHERE related_column IN (selected_rows)
If the total number of characters in the query with
related_column
is more than 1,048,576 (the default value of
max_allowed_packet
, you should split it into smaller parts and
execute multiple DELETE
statements. You will probably get the
fastest DELETE
by only deleting 100-1000 related_column
id's per time if the related_column
is an index. If the
related_column
isn't an index, the speed is independent of the
number of arguments in the IN
clause.