Многократное удаление в одном запросе - PullRequest
2 голосов
/ 18 сентября 2010

УДАЛИТЬ ИЗ Таблицы1, ГДЕ ConditionID =? ConditionID;

DELETE FROM Table2 WHERE ConditionID=?ConditionID;

DELETE FROM Table3 WHERE ConditionID=?ConditionID;

ConditionID - это столбец, присутствующий в таблицах Table1, Table2, Table3, вместо того, чтобы запускаться 3 раза по отдельности, есть ли способ выполнить все три в одном запросе (в mysql)?

Ответы [ 4 ]

5 голосов
/ 18 сентября 2010

Если 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)
1 голос
/ 18 сентября 2010

Я не знаю, как выглядит ваша схема, но если вы используете InnoDB или аналогичный движок таблиц для ваших таблиц и у вас есть внешние ключи, вы можете установить условия, которые приведут к удалению производных записей при родительской записи. удален См. http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html для получения дополнительной информации об этом.

0 голосов
/ 12 октября 2011

Вы можете удалить строки из нескольких таблиц, просто используя mysql «delete» query.Consider, у вас есть две таблицы профиля и книги.

Таблица профиля состоит из

  • id
  • name

Книга таблиц состоит из

  • pid
  • book
  • цена

Вы можете удалить записи из этих двух таблиц для определенного идентификатора, используя этот запрос,

delete profile,books from profile,books where profile.id=18 and profile.id=books.pid;
0 голосов
/ 18 сентября 2010

Неа.ConditionID является отдельным в каждом из них - просто потому, что оно имеет одинаковое имя, не означает, что это один и тот же столбец.Если вы полностью укажете имена, вы сможете увидеть их лучше:

DELETE FROM Table1 WHERE Table1.ConditionID=?ConditionID;

DELETE FROM Table2 WHERE Table2.ConditionID=?ConditionID;

DELETE FROM Table3 WHERE Table3.ConditionID=?ConditionID;
...