Як выдаліць радок у 3 табліцы з такім жа запытам у My SQL

выдаліць з tbl_savedgroupmessage, tbl_savedusermessage, tbl_message дзе tbl_savedgroupmessage.msgid = tbl_savedusermessage.msgid = tbl_message.msgid = '876'

Я паспрабаваў гэта, але ён выдае памылку

1
Так, гэта робіць ...
дададзена аўтар matino, крыніца

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 |
+------+
5
дададзена
Ці азначае гэта сапраўды працуе? Вы можаце даць спасылку на дакументацыю?
дададзена аўтар Icarus, крыніца
Я згодны, MySQL дакументацыя горшае, што я бачыў, але вы можаце забяспечыць невялікі скрыпт дэманструе, што гэта на самай справе працуе? Я не бягу MySQL, на жаль.
дададзена аўтар Icarus, крыніца
+1 @Devart Я проста зрабіў пошук па MySQL дакументацыі і выявіў, што ваша зацвярджэнне дакладна. Я upvoted гэтага адказу. Гэта лепшы адказ на тое, што ОП хоча, але <я> Я да гэтага часу лічу, што ўстанаўленне абмежаванняў належным чынам правільны спосаб зрабіць гэта. Гэта можа быць, чаму большасць СКБД не падтрымліваюць гэта.
дададзена аўтар Icarus, крыніца
@ Mr.Mindor Дзякуй. Я знайшоў яго занадта і абнавіў свой адказ пра тое, што я не маю рацыі, мяркуючы, што MySQL не падтрымлівае гэта. Я upvoted гэтага адказу.
дададзена аўтар Icarus, крыніца
Часам дакументацыя пакідае жадаць лепшага.
дададзена аўтар Devart, крыніца
Ён працуе і выкарыстоўваецца адзін аператар.
дададзена аўтар Devart, крыніца
Я дадаў прыклад.
дададзена аўтар Devart, крыніца
Гэта працуе, і дакументальна (належным чынам з двума прыкладамі) можна тут: DEV. mysql.com/doc/refman/5.1/en/delete.html . Але ... у большасці выпадкаў я б аддаў перавагу выкарыстоўваць тры адзінарнае заяву, па адным для кожнай табліцы.
дададзена аўтар Bjoern, крыніца
+1 да MySQL для забеспячэння магчымасці выдалення з некалькіх табліц. Гэта не дапускаецца ў Sybase або MS.
дададзена аўтар Mr.Mindor, крыніца
@Icarus дакументацыя: dev.mysql.com/doc/refman/5.0/ ан/delete.html пошуку «некалькіх табліц»
дададзена аўтар Mr.Mindor, крыніца
dev.mysql.com/doc/refman/5.0/en/delete. HTML гэта там напісана ... на жаль, няма якары - але гэта ў ніжняй частцы старонкі.
дададзена аўтар Hikaru-Shindo, крыніца
Што такое t1, t2 я хачу, каб выдаліць усю запіс
дададзена аўтар Mark, крыніца

Вы не можаце выдаляць з трох табліц ў адным запыце ў гэтай манеры. выдаліць гэта аперацыя, якая нацэлена на адну табліцу.

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

Калі існуюць абмежаванні на месцы, якія б спасылаліся адной табліцы ў іншую, вам прыйдзецца змяніць парадак. Калі вам патрэбныя гэтыя ўсе няўдачу або поспеху разам, пакласці іх у транзакцыі і адкат на правал любога.

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

2
дададзена

Вы можаце выкарыстоўваць аб'яднаную каманду выдаліць яго, ці выдаленне радкоў асобна.

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;
0
дададзена

Вы павінны далучыцца табліцы разам, каб выдаліць яго разам. Акрамя таго, дадайце слупкі вы хацелі б выдаліць. напрыклад:

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

0
дададзена
THis адзін не выдаляе tbl_message табліцы я хачу зрабіць усё, што ў адным запыце
дададзена аўтар Mark, крыніца