Многократное удаление в одном запросе
-
03-10-2019 - |
Вопрос
Удалить из таблицы1, где ConnectIID =? ConnectiD;
DELETE FROM Table2 WHERE ConditionID=?ConditionID;
DELETE FROM Table3 WHERE ConditionID=?ConditionID;
Соединитель - это столбец, присутствующий в Table1, Table2, Table3, вместо работы 3 раза индивидуально, есть ли способ запускать все три в одном запросе (в MySQL)?
Решение
Если то ConditionID
одинаково для всех трех таблиц, вы должны быть в состоянии использовать Несколько таблиц Удалить синтаксис:
DELETE Table1, Table2, Table3
FROM Table1
JOIN Table2 ON (Table2.ConditionID = Table1.ConditionID)
JOIN Table3 ON (Table3.ConditionID = Table2.ConditionID)
WHERE Table1.ConditionID = ?;
Прецедент:
CREATE TABLE Table1 (id int, ConditionID int);
CREATE TABLE Table2 (id int, ConditionID int);
CREATE TABLE Table3 (id int, ConditionID int);
INSERT INTO Table1 VALUES (1, 100);
INSERT INTO Table1 VALUES (2, 100);
INSERT INTO Table1 VALUES (3, 200);
INSERT INTO Table2 VALUES (1, 100);
INSERT INTO Table2 VALUES (2, 200);
INSERT INTO Table2 VALUES (3, 300);
INSERT INTO Table3 VALUES (1, 100);
INSERT INTO Table3 VALUES (2, 100);
INSERT INTO Table3 VALUES (3, 100);
Результат:
DELETE Table1, Table2, Table3
FROM Table1
JOIN Table2 ON (Table2.ConditionID = Table1.ConditionID)
JOIN Table3 ON (Table3.ConditionID = Table2.ConditionID)
WHERE Table1.ConditionID = 100;
SELECT * FROM Table1;
+------+-------------+
| id | ConditionID |
+------+-------------+
| 3 | 200 |
+------+-------------+
1 row in set (0.00 sec)
SELECT * FROM Table2;
+------+-------------+
| id | ConditionID |
+------+-------------+
| 2 | 200 |
| 3 | 300 |
+------+-------------+
2 rows in set (0.00 sec)
SELECT * FROM Table3;
Empty set (0.00 sec)
Другие советы
Я не знаю, как выглядит ваша схема, но если вы используете InnoDB или аналогичный настольный двигатель для ваших таблиц, и у вас есть внешние ключей, вы можете установить условия, которые приведут к удалению полученных записей, когда родительская запись будет удалена. Видеть http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html. Для получения дополнительной информации об этом.
Неа. ConditionID
Отдельно в каждом - только потому, что он имеет то же имя, не означает, что это тот же столбец. Если вы полностью квалифицируете имена, вы сможете увидеть его лучше:
DELETE FROM Table1 WHERE Table1.ConditionID=?ConditionID;
DELETE FROM Table2 WHERE Table2.ConditionID=?ConditionID;
DELETE FROM Table3 WHERE Table3.ConditionID=?ConditionID;
Вы можете удалить строки из нескольких таблиц, просто используя mysql "Delete" Query.consider, у вас есть два таблица профиля и книги.
Таблица профиля состоит,
- я бы
- имя
Стол книг состоит,
- пид
- книга
- цена
Вы можете удалить записи из этих двух таблиц для определенного идентификатора, используя этот запрос,
delete profile,books from profile,books where profile.id=18 and profile.id=books.pid;