Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Удаление записей таблицы по данным другой таблицы (http://forum.oszone.net/showthread.php?t=265340)

xNiSSaNx 31-07-2013 17:17 2194060

Удаление записей таблицы по данным другой таблицы
 
Есть 2 таблицы: root,dir
Такой структуры
ROOT:
| id | name | id_PC |
| 1 |_ first _| 9 |
| 2 | second| 9 |

DIR:
| id | id_root | name |
| 5 |___ 1 __| one |
| 6 |___ 1 __| two |
| 7 |___ 2 __| one |
|12|___ 2 __| two |
|13|___ 2 __|three|
|21|___ 2 __| four |

И нужно осущетвить такой запрос:

Удалить запись из таблицы ROOT с id_PC = 9
При этом следом должны удалиться все записи из dir у которых id_root равно id удаленных записей из ROOT


Делал таким путем: выбрал список ROOT
Потом по id этих записей ROOT удалил из DIR где id_root совпадают с данными id, с одной стороны все правильно, но запросов не мало получается, можно ли одним запросом это сделать? Или минимальным их количеством?

mar 31-07-2013 17:25 2194070

xNiSSaNx,
Вы не указали самое главное - в какой СУБД работаете. Видимо, раз не указали, то это mysql? :)
То, что Вы хотите, можно делать, создав триггер, т.е. процедуру, которая будет автоматически выполняться в случае определенного типа запросов (в данном случае - при удалении записей из таблицы).
Что-то вроде:
Код:


CREATE TRIGGER del_t_one BEFORE DELETE ON t_one
 FOR EACH ROW BEGIN
    DELETE FROM t_two WHERE id_root = OLD.id;
  END

где t_one и t_two - это названия первой и второй таблицы, del_t_one - название триггера

xNiSSaNx 31-07-2013 19:30 2194175

Цитата:

Цитата mar
где t_one и t_two - это названия первой и второй таблицы, del_t_one - название триггера »

Почему то не удаляет, ни из dir, ни из root

mar 01-08-2013 12:07 2194422

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

xNiSSaNx 02-08-2013 21:58 2195426

Цитата:

Цитата mar
Что там написано? »

ошибок не выдает, но не все записи удаляются, которые должны

Спасибо и на это, сделал по другому


Время: 19:09.

Время: 19:09.
© OSzone.net 2001-