Удалить строки из нескольких объединенных таблиц - PullRequest
0 голосов
/ 01 августа 2020

У меня проблема с удалением строк из нескольких объединенных таблиц на SQL сервере.

Это мой сценарий:

DELETE d, di, dis 
FROM Data d  
JOIN DataItem di ON di.DataId = d.DataId  
JOIN DataItemSend dis ON dis.DataItemId = di.DataItemId
WHERE d.CardId = 1555

Но этот синтаксис неверен и сначала запятые линии подчеркнуты. Как я могу решить эту проблему?

1 Ответ

2 голосов
/ 01 августа 2020

SQL Сервер не поддерживает удаление сразу из нескольких таблиц - в отличие, например, от MySQL.

Однако способ построения вашего запроса выглядит так, будто вы можете просто настроить правильный внешний ключи между таблицами, с параметром on delete cascade, например:

alter table DataItem 
    add constraint fk_DataItem_Data
    foreign key (DataId) references Data(DataId)
    on delete cascade
;

alter table DataItemSend 
    add constraint fk_DataItemSend_DataItem
    foreign key (DataItemId) references DataItem(DataItemId)
    on delete cascade
;

С этой настройкой вы можете просто удалить из верхней родительской таблицы:

delete from Data where CardId = 1555

... И будьте уверены, что все связанные записи в дочерней таблице будут удалены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...