2011-07-25 3 views
0

У меня есть две таблицы, пользователь и запрет. Таблица пользователей состоит из двух столбцов: id и type. Таблица запрета также имеет две колонки userID и bannedUserID. Я хочу удалить записи в таблице ban, где bannedUserID имеет type из 'Admin'.Удалить операцию в SQL с присоединением к ней

У меня есть такой запрос, но я не уверен, правильно это или нет.

DELETE FROM ban WHERE ban.bannedUserID IN (SELECT id FROM user WHERE type = 'Admin')

Является ли это правильно? Нужно ли добавлять/удалять что-нибудь?

+2

Кажется правильным –

+1

выглядит хорошо для меня также –

+1

Ваш запрос кажется правильным. Чего мне интересно, это использование двух столбцов: 'userID' и' bannedUserID' в таблице 'ban'. –

ответ

4

Если вы не уверены в том, УДАЛИТЬ правильно, вы можете проверить это путем преобразования в эквиваленте SELECT:

SELECT b.bannedUserID 
FROM ban b JOIN user u ON b.bannedUserID = u.id 
WHERE u.type = 'Admin'; 

являются идентификаторами, возвращаемые этим запросом те, которые вы хотите удалить?

Тогда попробуйте в сделке (если вы используете механизм хранения, который поддерживает транзакции, то есть не MyISAM), так что вы можете выполнить откат в случае необходимости:

START TRANSACTION; 

DELETE b 
FROM ban b JOIN user u ON b.bannedUserID = u.id 
WHERE u.type = 'Admin'; 

/* do some SELECT to see if the correct rows have been deleted and no others */ 
/* but if anything appears wrong, and ban is an InnoDB table, you can... */ 

ROLLBACK; 

Обратите внимание, что я использую MySQL, мульти- таблица Синтаксис DELETE. Он должен работать одинаково с подзапросом, но в некоторых случаях он может быть более гибким.

+0

Хороший материал !!! +1 – RolandoMySQLDBA

+0

+1 для дидактики шаг за шагом –

+0

Я запустил свой собственный sql, и это сработало, спасибо за ответ. –

Смежные вопросы