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

#mysql

#mysql

Вопрос:

удалить из tbl_savedgroupmessage, tbl_savedusermessage, tbl_message где tbl_savedgroupmessage.msgid= tbl_savedusermessage.msgid= tbl_message.msgid= ‘876’

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

Ответ №1:

Попробуйте это —

 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 |
 ------ 
 

Комментарии:

1. Действительно ли это работает? Можете ли вы предоставить ссылку на документацию?

2. Иногда документация оставляет желать лучшего.

3. Я согласен, документация MySQL — худшее, что я видел, но можете ли вы предоставить небольшой скрипт, демонстрирующий, что это действительно работает? К сожалению, я не запускаю MySQL.

4. Что такое t1, t2, я хочу удалить всю запись

5. 1 к mysql за разрешение удаления из нескольких таблиц. Это не разрешено в Sybase или MS.

Ответ №2:

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

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

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

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

Ответ №3:

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

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

Комментарии:

1. Это не удаляет таблицу tbl_message Я хочу сделать все в одном запросе

Ответ №4:

Вы можете использовать объединенную команду УДАЛЕНИЯ или удалять строки по отдельности.

 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;