Как удалить строку в 3 таблицах с одинаковым запросом в My sql

Удалить из tbl_savedgroupmessage, tbl_savedusermessage, tbl_message, где tbl_savedgroupmessage.msgid= tbl_savedusermessage.msgid= tbl_message.msgid= '876'

Я пробовал это, но выдает ошибку

4 ответа

Решение

Попробуй это -

DELETE t1, t2, t3
FROM
  tbl_savedgroupmessage t1
JOIN tbl_savedusermessage t2
  ON t1.msgid = t2.msgid
JOIN tbl_message t3
  ON t1.msgid = t3.msgid
WHERE
  t3.msgid = '876'

Пример:

CREATE TABLE table_a (
  id INT(11) DEFAULT NULL
);

CREATE TABLE table_b (
  id INT(11) DEFAULT NULL
);

INSERT INTO table_a VALUES 
  (2),
  (3),
  (1);

INSERT INTO table_b VALUES 
  (2),
  (5),
  (1);

DELETE t1, t2
FROM
  table_a t1
JOIN table_b t2
  ON t1.id = t2.id
WHERE
  t1.id = 1;


SELECT * FROM table_a;
+------+
| id   |
+------+
|    2 |
|    3 |
+------+

SELECT * FROM table_b;
+------+
| id   |
+------+
|    2 |
|    5 |
+------+

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

delete from tbl_savedgroupmessage where msgid = '876';
delete from tbl_savedusermessage where msgid = '876';
delete from tbl_message where msgid = '876'

Если существуют ограничения, ссылающиеся на одну таблицу на другую, вам придется изменить порядок. Если вам нужно, чтобы все они потерпели неудачу или преуспели вместе, поместите их в транзакцию и откатитесь на неудачу любой из них.

Редактировать: Хотя это верно для ANSI совместимого SQL и T-SQL, на самом деле можно удалить из нескольких таблиц в одном операторе в MySQL. думаю, вы узнаете что-то новое каждый день.

Вы можете использовать объединенную команду DELETE или удалить строки отдельно.

DELETE FROM
    tbl_message, tbl_savedgroupmessage, tbl_savedusermessage
LEFT JOIN
    tbl_savedgroupmessage ON (tbl_message.msgid = tbl_savedgroupmessage.msgid)
LEFT JOIN
    tbl_savedusermessage ON (tbl_message.msgid = tbl_savedusermessage.msgid)
WHERE
   tbl_message.msgid = 876;

Вам придется объединить таблицы, чтобы удалить их вместе. Кроме того, добавьте столбцы, которые вы хотите удалить. например:

delete tbl_savedgroupmessage.*, tbl_savedusermessage.*
from tbl_savedgroupmessage, tbl_savedusermessage
where tbl_savedgroupmessage.msgid = tbl_savedusermessage.msgid
and tbl_savedgroupmessage.msgid = '876'

Другие вопросы по тегам