Удаление записей в MySQL, где идентификаторы из двух таблиц совпадают - PullRequest
1 голос
/ 22 декабря 2011

У меня есть две таблицы, TableA и TableB, и у каждой есть поле с именем ID.

Я хочу удалить все записи в TableA, где ID соответствует записи в TableB.

Я пытаюсь выполнить эту команду, но TableB не найден

DELETE FROM TableA WHERE TableA.id=TableB.id;

Ответы [ 4 ]

5 голосов
/ 22 декабря 2011

Вы не можете ссылаться на TableB на WHERE, потому что эта таблица не была объединена.Но в этом случае вам даже не нужно JOIN, используйте это:

DELETE FROM TableA WHERE id IN (SELECT id FROM TableB)
2 голосов
/ 22 декабря 2011

Возможно, вы захотите использовать ограничения внешнего ключа , чтобы вам не приходилось вручную выполнять эти типы операций, скорее база данных будет обрабатывать их за вас.

Например,если у вас есть общий идентификатор между tableA и tableB, и произошло удаление из tableA, MySQL автоматически обработает удаление из tableB, и вам не придется беспокоиться о присоединении к другим таблицам, имеющим ограничение FK для tableA.

Это может быть просто:

DELETE FROM tableA WHERE id = some_id LIMIT 1;
1 голос
/ 22 декабря 2011

Как насчет использования INNER JOIN?Это работало для меня в MySQL:

DELETE tablea FROM tablea
INNER JOIN tableb
ON tablea.ID = tableb.ID
1 голос
/ 22 декабря 2011

Я бы использовал объединение

DELETE TABLEA FROM TABLEA INNER JOIN TABLEB USING(ID)

Большие подзапросы могут быть медленными, если MySQL заканчивает тем, что фактически должен материализовать временную таблицу - определенно стоит проверить план запроса

...