MySQL удалить строку из нескольких таблиц - PullRequest
4 голосов
/ 06 февраля 2010

Это правильный способ сделать это?

DELETE t1, t2, t3, t4 FROM 
  table1 as t1 
  INNER JOIN  table2 as t2 on t1.id = t2.id
  INNER JOIN  table3 as t3 on t1.id=t3.id
  INNER JOIN  table4 as t4 on t1.id=t4.id
  WHERE  t1.username='%s' AND t1.id='%s'

Ответы [ 3 ]

11 голосов
/ 06 февраля 2010

Да, это правильно. Здесь отлично работает:

CREATE TABLE table1 (id int, username nvarchar(30));
CREATE TABLE table2 (id int);
CREATE TABLE table3 (id int);
CREATE TABLE table4 (id int);

INSERT INTO table1 VALUES (1, 'Foo'),(2, 'Bar');
INSERT INTO table2 VALUES (1),(2);
INSERT INTO table3 VALUES (1),(2);
INSERT INTO table4 VALUES (1),(2);

SELECT COUNT(*) FROM table1;
2
SELECT COUNT(*) FROM table2;
2
SELECT COUNT(*) FROM table3;
2
SELECT COUNT(*) FROM table4;
2

DELETE t1, t2, t3, t4 FROM
  table1 as t1
  INNER JOIN  table2 as t2 on t1.id = t2.id
  INNER JOIN  table3 as t3 on t1.id=t3.id
  INNER JOIN  table4 as t4 on t1.id=t4.id
  WHERE  t1.username='Foo' AND t1.id='1';

SELECT COUNT(*) FROM table1;
1
SELECT COUNT(*) FROM table2;
1
SELECT COUNT(*) FROM table3;
1
SELECT COUNT(*) FROM table4;
1

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

4 голосов
/ 06 февраля 2010

Простой способ понять это - сначала написать его как запрос:

SELECT * FROM 
        table1 as t1 
        INNER JOIN  table2 as t2 on t1.id = t2.id
        INNER JOIN  table3 as t3 on t1.id=t3.id
        INNER JOIN  table4 as t4 on t1.id=t4.id
        WHERE  t1.username='%s' AND t1.id='%s'

Если вы получите ожидаемые результаты, просто замените * Select ** на Delete и ваши имена таблиц. Тогда это станет:

Delete t1, t2, t3, t4 From table1 as t1 
        INNER JOIN  table2 as t2 on t1.id = t2.id
        INNER JOIN  table3 as t3 on t1.id=t3.id
        INNER JOIN  table4 as t4 on t1.id=t4.id
        WHERE  t1.username='%s' AND t1.id='%s'
1 голос
/ 26 июня 2014

Упростите с помощью:

DELETE FROM `Table1` t1, `Table2` t2 USING t1, t2
WHERE t1.`id` =  t2.`id` AND t1.`id` = 10; <br>

Наслаждайтесь:)

...