Удалить недопустимую строку, чтобы добавить ограничение внешнего ключа? - PullRequest
0 голосов
/ 08 октября 2019

У меня есть две таблицы A и B.

B имеет столбец ID_A, который "ссылается" на столбец идентификатора A, но без ограничения внешнего ключа (поэтому нет каскадного удаления).

Я хочудобавить ограничение внешнего ключа в столбец ID_A, но есть строки, которые имеют недопустимое значение (из-за удаленной строки A).

Есть ли способ удалить эти недопустимые строки?

1 Ответ

0 голосов
/ 08 октября 2019

Вы можете использовать антипаттерн LEFT JOIN для идентификации и удаления потерянных записей:

DELETE tb
FROM tableb tb
LEFT JOIN tablea ta ON ta.id = tb.id_a
WHERE ta.id IS NULL

Другой вариант - использовать условие NOT EXITS с коррелированным подзапросом:

DELETE FROM tableb tb
WHERE NOT EXISTS (
    SELECT 1 FROM tablea WHERE ta.id = tb.id_a
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...