Помогите c update в таблице с рекурсией !

новичок в sql
Дата: 13.10.2003 08:48:23
Народ ! Помогите есть две таблицы:
в одной записи по подразделениям т.е.
1. Подразделение

код подразделения (счетчик)
название подразделения
код вышестоящего подразделения (причем код берется из этой же таблицы из поля код подразделения )
2. Подразделение (старая таблица)
код подразделения (счетчик)
название подразделения
код вышестоящего подразделения (причем код берется из этой же таблицы из поля код подразделения такк же )

в общем я данные из второй таблицы вставил в первую (новую),там уже ввели новые подразделения, т.е. коды не совпадают. вот как сделать обновление соответствующих вышестоящих подразделений с учетом данных из старой таблицы ? Помогите ! А то я не догоняю.
Артем1
Дата: 13.10.2003 08:59:45
Это вроде как классическое дерево.
Если код вышестоящего подразделения = null,
то в цикле надо перебирать всех родителей, пока поле код вышестоящего подразделения не null и делать необходимые обновления.
Это если для каждого родителя отдельное действие.

Если для всех родителей одно и то-же, то их можно просто собрать во временную таблицу и заапдейтить одним запросом
новичок в sql
Дата: 13.10.2003 09:18:23
Нет это не то, люди помогите, плиз ! Я же знаю, тут есть опытные программеры !
Berg
Дата: 13.10.2003 09:55:59
Суть в том, чтобы поиметь соответствие старых и новых ID, поэтому:
0) Добавь в новую таблицу временно дополнительное поле OLD_ID;
1) Сделай INSERT INTO [новая_таблица](ее поля кроме поля ID, OLD_ID) SELECT *, ID FROM [старая табла]
При этом ты "застолбишь" диапазон ID в новой таблице. В поле OLD_ID пиши старый ID, т.е. ID из старой таблицы

А теперь, когда у тебя есть соответствие NEW_ID <-> OLD_ID, то достаточно сделать

UPDATE NewTable
SET Parent = (SELECT ID FROM NewTable WHERE OLD_ID=Parent)


В общем типа такого...
новичок в sql
Дата: 13.10.2003 10:17:01
это уже дельный совет, счас попробую, спасибо.
Berg
Дата: 13.10.2003 10:22:05
Только не делай "дослочно" приведенный мной UPDATE, т.к. он попортит уже имеющихся родителей новой таблы. Или до заливки данных (после создания столбца) сделай
UPDATE NewTable
SET OLD_ID = ID