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