Подтвердить что ты не робот

Строки SQL Delete на основе другой таблицы

Это, вероятно, очень легко, но в понедельник утром. У меня две таблицы:

Table1:

Field        | Type             | Null | Key | Default | Extra
id           | int(32) unsigned | NO   | PRI | NULL    | auto_increment
group        | int(32)          | NO   |     | 0       |                

Table2:

Field     | Type             | Null | Key | Default | Extra
group     | int(32)          | NO   |     | 0       | 

Игнорирование других полей... Мне нужен один оператор SQL DELETE, который удалит все строки в таблице 1, для которых существует таблица2.group, равная Table1.group. Таким образом, если в строке таблицы 1 есть группа = 69, эта строка должна быть удалена тогда и только тогда, когда существует строка в таблице 2 с группой = 69.

Спасибо за любую помощь.

4b9b3361

Ответ 1

Я думаю, что это то, что вы хотите:

DELETE FROM `table1`
WHERE `group` in (SELECT DISTINCT `group` FROM `table2`)

Ответ 2

Я думаю, что этот путь быстрее:

DELETE FROM t1 USING table1 t1 INNER JOIN table2 t2 ON ( t1.group = t2.group );

Ответ 3

Что-то вроде этого

delete from table1 where group in (select group from table2)

Ответ 4

Хорошее решение - это просто написать SQL, как вы сами это говорите:

DELETE FROM Table1
WHERE
  EXISTS(SELECT 1 FROM Table2 WHERE Table2.Group = Table1.Group)

С уважением, Арно Бринкман

Ответ 5

Сверху моей головы:

delete from Table1 where id in (select id from table1 inner join table2 on Table1.group = Table2.group)

Я сделал это немного иначе, чем другие плакаты. Я думаю, что если в таблице 2 есть большое количество строк, это может быть лучше. Может кто-то, пожалуйста, поставил меня прямо на это?