Вернемся к нашей задачке, которую я рассматривала ранее.
Полностью она выглядит так - у меня есть некая табличка folks, в которой содержатся люди. У людей есть свои уникальные идентификаторы, у половины даже есть телефоны. А я хочу, чтобы телефоны были у всех.
Создаю отдельную табличку для создания нужного количества телефонов. Теперь мне надо данные оттуда перенести в folks, учитывая то, что телефонов нет у 1 человека, 2,3 6, 11 итд. То есть нельзя просто взять и перетащить данные. Надо их распихать в отдельные строки.
Хотя, конечно, один из вариантов решения - создав нужное количесто телефонов отдельно, перенести их как раз скопом, затерев уже существующие.
Но, предположим, что этот вариант нас не устраивает. Как распихать строки из одной таблички в строки из другой?
1. Добавляем поле id к телефонам
alter table phone add ( id INTEGER );
commit;
2. Заполняем новую колонку значениями id тех людей, у которых еще нет телефонов.
insert into phone (id)
(select a.id from
((SELECT
rownum AS rw_id,
id
FROM folks WHERE phone_number IS NULL) a
JOIN
(SELECT rownum AS rw_id
FROM phone
) b
ON (a.rw_id=b.rw_id)));
commit;
3. Метчим 2 таблицы по id людей!
MERGE INTO folks b USING phone ab ON (b.id = ab.id)
WHEN MATCHED THEN
UPDATE
SET b.filed_1 = ab.filed_1,
b.filed_2 = ab.filed_2,
b.filed_3 = ab.filed_3,
b.filed_4 = ab.filed_4,
b.filed_5 = ab.filed_5,
b.filed_6 = ab.filed_6,
b.filed_7 = ab.filed_7,
b.phone_number = ab.phone_number,
b.filed_9 = ab.filed_9;
commit;
Все
Полностью она выглядит так - у меня есть некая табличка folks, в которой содержатся люди. У людей есть свои уникальные идентификаторы, у половины даже есть телефоны. А я хочу, чтобы телефоны были у всех.
Создаю отдельную табличку для создания нужного количества телефонов. Теперь мне надо данные оттуда перенести в folks, учитывая то, что телефонов нет у 1 человека, 2,3 6, 11 итд. То есть нельзя просто взять и перетащить данные. Надо их распихать в отдельные строки.
Хотя, конечно, один из вариантов решения - создав нужное количесто телефонов отдельно, перенести их как раз скопом, затерев уже существующие.
Но, предположим, что этот вариант нас не устраивает. Как распихать строки из одной таблички в строки из другой?
1. Добавляем поле id к телефонам
alter table phone add ( id INTEGER );
commit;
2. Заполняем новую колонку значениями id тех людей, у которых еще нет телефонов.
insert into phone (id)
(select a.id from
((SELECT
rownum AS rw_id,
id
FROM folks WHERE phone_number IS NULL) a
JOIN
(SELECT rownum AS rw_id
FROM phone
) b
ON (a.rw_id=b.rw_id)));
commit;
3. Метчим 2 таблицы по id людей!
MERGE INTO folks b USING phone ab ON (b.id = ab.id)
WHEN MATCHED THEN
UPDATE
SET b.filed_1 = ab.filed_1,
b.filed_2 = ab.filed_2,
b.filed_3 = ab.filed_3,
b.filed_4 = ab.filed_4,
b.filed_5 = ab.filed_5,
b.filed_6 = ab.filed_6,
b.filed_7 = ab.filed_7,
b.phone_number = ab.phone_number,
b.filed_9 = ab.filed_9;
commit;
Все