2015-04-05 3 views
0

У меня есть 3 таблицы, например:Как удалить данные из нескольких таблиц в одном запросе

release (release_id, name, ...) 

medium (medium_id, release_id, name, ...) 

track (track_id, medium_id, title, ...) 

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

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

Нужно ли мне несколько запросов на удаление?

ответ

1

Да, вы можете сделать это в одном заявлении, ссылаясь несколько таблиц в ВЕЬЕТЕ:

DELETE FROM `release`, medium, track 
USING `release`, medium, track 
WHERE `release`.release_id = medium.release_id 
AND medium.medium_id = track.medium_id 
AND `release`.release_id = 1; 

Sample SQL Fiddle

Если это то, что должно случиться всегда, возможно, вы захотите взглянуть на on delete cascade опция для внешних ключей. Дополнительную информацию см. В документах: 13.1.14.2 Using FOREIGN KEY Constraints

2

Строго говоря, да, вам нужны три отдельных оператора удаления.

Однако, если вы всегда хотите, чтобы связанные строки удалялись из двух других таблиц при удалении строки из таблицы «release», вы можете использовать внешние ключи и ограничение DEL DELETE CASCADE в таблице «release».

См., Например, http://www.mysqltutorial.org/mysql-on-delete-cascade/

1

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

delete r, m, t 
from release r 
left join medium m on m.release_id = r.release_id 
left join track t on t.medium_id = m.medium_id 
where r.release_id = 123 
Смежные вопросы