PDA

Показать полную графическую версию : Удаление записей таблицы по данным другой таблицы


xNiSSaNx
31-07-2013, 17:17
Есть 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
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
где t_one и t_two - это названия первой и второй таблицы, del_t_one - название триггера »
Почему то не удаляет, ни из dir, ни из root

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

xNiSSaNx
02-08-2013, 21:58
Что там написано? »
ошибок не выдает, но не все записи удаляются, которые должны

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




© OSzone.net 2001-2012