Объеденение данных в связанных таблицах

Niswn
Дата: 15.09.2006 14:20:47
В БД создана следующая структура таблиц:

R1 1---M R2 1---M R3
где R1, R2, R3 - таблицы
1---M - связь "один ко многим"

Есть два идентификатора таблицы R1. По сути нужно объеденить информацию для этих идентификаторов и занести ее в таблицы. Т.е необходимо создать новую запись в таблицы R1 (это я могу сделать ;)). А также создать записи в таблицах R2 и R3, которые являются объеденением записей этих таблиц для заданных идентификаторов R1. Т.е если для первого идент. в таблице R2 есть 5 записей, а для второго 6, то нужно добавить 11 записей.
Как это можно сделать, чтобы связи между таблицами не были нарушены?
Glory
Дата: 15.09.2006 14:30:40
insert into t2(...)
select ...
from t1 inner join t3 ...
Niswn
Дата: 15.09.2006 14:53:27
Не то. Я наверное неправильно объяснил.

Есть три связанные по идентикаторам (один ко многим) таблицы R1, R2, R3:
R1 1-M R2 1-M R3
Нужно объеденить две записи (строки) таблицы R1 и всю, связанную с этими записями информацию, которая лежит в таблицах R2 и R3. Полученный результат записать в БД.
Для объеденения записей ОДНОЙ таблицы используется ключевое слово union, типа

select * from R2 where R2.R1_ID=@R1_ID1
union all
select * from R2 where R2.R1_ID=@R1_ID2

Но как объеденить записи не в одной в двух или нескольких связанных таблицах???
GreenSunrise
Дата: 15.09.2006 14:56:23
Приведите скрипты таблиц, скрипты их заполнения тестовыми данными и желаемый результат для этих скриптов.
GreenSunrise
Дата: 15.09.2006 14:57:15
Заодно скажите, надо ли вам вставить эту новую объединенную информацию в таблицы или только селектом ее увидеть. Из вашего объяснения это непонятно.
Niswn
Дата: 15.09.2006 15:08:22
Скрипты привести не могу. Это я в примере написал три связанных таблички. На самом деле их около 10 штук и каждая с каждой связана соотношением один ко многим.
Отобразить объединение довольно просто: делать union all для каждой таблицы и все. Мне же именно нужно ВНЕСТИ в таблицы объедененную информацию.
Вся проблема в этих связях. При внесении идентификаторы (первичные ключи) станут другими, а reference keys не поменяются. То есть связь будет нарушена. Как поменять reference key не знаю :(
GreenSunrise
Дата: 15.09.2006 15:12:28
Типа такого, что ли?
/topic/195188#1651830
Niswn
Дата: 15.09.2006 15:29:36
Спасибо за ответ. Это конечно выход, но тут есть очень существенный минус: в каждую таблицу придется добавлять поле old_id, чего делать в моем случае нельзя (очень сильно не рекомендуется :) ).
Может можно еще что-нибудь придумать?

Пока буду мутить с inner join, union. Если не получится и не никаких новых идей не будет, то воспользуюсь вашим вариантом, но придется создавать временные таблички и туда пихать промежуточные результаты.