Ответ 1
Я думаю, что это то, что вы хотите:
DELETE FROM `table1`
WHERE `group` in (SELECT DISTINCT `group` FROM `table2`)
Это, вероятно, очень легко, но в понедельник утром. У меня две таблицы:
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.
Спасибо за любую помощь.
Я думаю, что это то, что вы хотите:
DELETE FROM `table1`
WHERE `group` in (SELECT DISTINCT `group` FROM `table2`)
Я думаю, что этот путь быстрее:
DELETE FROM t1 USING table1 t1 INNER JOIN table2 t2 ON ( t1.group = t2.group );
Что-то вроде этого
delete from table1 where group in (select group from table2)
Хорошее решение - это просто написать SQL, как вы сами это говорите:
DELETE FROM Table1
WHERE
EXISTS(SELECT 1 FROM Table2 WHERE Table2.Group = Table1.Group)
С уважением, Арно Бринкман
Сверху моей головы:
delete from Table1 where id in (select id from table1 inner join table2 on Table1.group = Table2.group)
Я сделал это немного иначе, чем другие плакаты. Я думаю, что если в таблице 2 есть большое количество строк, это может быть лучше. Может кто-то, пожалуйста, поставил меня прямо на это?