Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MySQL: удалить данные из связанных таблиц 
V
    Опции темы
patap
Дата 12.2.2009, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: нет
Всего: 40



Подскажите по такой вот проблеме:

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


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Akina
Дата 12.2.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
patap
Дата 12.2.2009, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: нет
Всего: 40



Цитата

а при чём тут 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


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Akina
Дата 12.2.2009, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(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, и этот запрос не срабатывает.

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Deniel_li
Дата 12.2.2009, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 6.12.2007

Репутация: нет
Всего: 1



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


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

PM MAIL   Вверх
patap
Дата 13.2.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: нет
Всего: 40



Цитата

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


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

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

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 с заданным значением.

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



Это сообщение отредактировал(а) patap - 13.2.2009, 10:31


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Akina
Дата 13.2.2009, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Код

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



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
patap
Дата 13.2.2009, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: нет
Всего: 40



оно самое  smile  спасибо
ща про JOIN почитаем...


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0739 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.