Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > MySQL: удалить данные из связанных таблиц


Автор: patap 12.2.2009, 18:01
Подскажите по такой вот проблеме:

У меня есть несколько таблиц t1, t2, t3 связанные по одному id. нужно из каждой таблицы удалить записи, id которых равны заданному.

Автор: Akina 12.2.2009, 18:04
а при чём тут IF?

Автор: patap 12.2.2009, 18:15
Цитата

а при чём тут IF?


я понимаю что можно удалить 
Код

DELETE t1, t2, t3 
FROM tab1 AS t1, tab2 AS t2, tab3 AS t3 
WHERE t1.id=1

но у меня такая ситуация, что допустим в таблице tab3 нет записи с указанным id, и этот запрос не срабатывает.

полез в инет и нашел чето типа такого
Код

IF SELECT * FROM tab WHERE id=1 
    DELETE FROM tab WHERE id=1


ну и собственно мне кажется, что нужно использовать структуру типа такой. но как конкретно я не знаю. по-этому мне и кажеться что в запрос нужно вставить IF

Автор: Akina 12.2.2009, 18:51
Цитата(patap @  12.2.2009,  19:15 Найти цитируемый пост)
я понимаю что можно удалить 
Код

DELETE t1, t2, t3 
FROM tab1 AS t1, tab2 AS t2, tab3 AS t3 
WHERE t1.id=1
но у меня такая ситуация, что допустим в таблице tab3 нет записи с указанным id, и этот запрос не срабатывает.

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

Автор: Deniel_li 12.2.2009, 18:59
Цитата(patap @  12.2.2009,  18:15 Найти цитируемый пост)
но у меня такая ситуация, что допустим в таблице tab3 нет записи с указанным id, и этот запрос не срабатывает.


 значит надо использовать left join к этой таблице, а не соединять декартовым произведением

Автор: patap 13.2.2009, 10:30
Цитата

получиться просто полный армагеддон...


и действительно - армагедон...

принцип такой: 

tab1:
  id_t1 - primary key
  value

tab2:
  id_t1
  id_t2 - primary key
  value

tab3
  id_t1
  id_t2
  id_t3 - primary key
  value

все таблицы связаны по id_t1

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

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


Автор: Akina 13.2.2009, 10:36
Код

delete from t1, t2, t3
using t1
      left join t2
         on t1.id_t1=t2.id_t1
      left join t3
         on t1.id_t1=t3.id_t1
where t1.id_t1=1

Автор: patap 13.2.2009, 11:03
оно самое  smile  спасибо
ща про JOIN почитаем...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)