Удаление записей в MySQL, где идентификаторы из двух таблиц совпадают
У меня есть две таблицы, TableA
а также TableB
и у каждого есть поле с именем ID
,
Я хочу удалить все записи в TableA
где ID
соответствует записи в TableB
,
Я пытаюсь сделать эту команду, но TableB
не найден
DELETE FROM TableA WHERE TableA.id=TableB.id;
4 ответа
Вы не можете ссылаться на TableB на WHERE
потому что эта таблица не была объединена. Но в этом случае вам даже не нужно JOIN
, использовать этот:
DELETE FROM TableA WHERE id IN (SELECT id FROM TableB)
Вы можете рассмотреть возможность использования ограничений внешнего ключа, чтобы вам не приходилось вручную выполнять эти типы операций, скорее база данных будет обрабатывать их за вас.
Например, если у вас есть общий идентификатор между tableA и tableB, и произошло удаление из tableA, MySQL автоматически обработает удаление из tableB, и вам не придется беспокоиться о присоединении к другим таблицам с ограничением FK. к таблице А.
Это может быть так просто, как:
DELETE FROM tableA WHERE id = some_id LIMIT 1;
Как насчет использования INNER JOIN? Это сработало для меня в MySQL:
DELETE tablea FROM tablea
INNER JOIN tableb
ON tablea.ID = tableb.ID
Я бы использовал соединение
DELETE TABLEA FROM TABLEA INNER JOIN TABLEB USING(ID)
Большие подзапросы могут быть медленными, если MySQL заканчивает тем, что фактически материализует временную таблицу - определенно стоит проверить план запроса