Вопрос № 70578: Здраствуйте, вопрос по SQL! Подскажите как решить следующую задачу: нужно скопировать данные из одной таблицы в другую. Но есть повторяющиеся значения атрибута, который в новой таблице должен являться первичным (уникальным) ключом (у уникального ключ...
Вопрос № 70.578
Здраствуйте, вопрос по SQL! Подскажите как решить следующую задачу: нужно скопировать данные из одной таблицы в другую. Но есть повторяющиеся значения атрибута, который в новой таблице должен являться первичным (уникальным) ключом (у уникального ключа не может быть повторяющихся значений). Вот и сложность: как извлечь строки таблицы оператором select только с уникальными значениями?
СУБД Oracle 10i
Заранее благодарен
Рекомендую их куда-нибудь выгрузить в другую таблицу. Однако при таком подходе (использование в качестве первичного ключа бывшего неуникального значения) потеря данных неизбежна при условии, если вы планируете распрощаться с текущей таблицей.
--------- Вода - Это Огромная Дорога Среди Красоты
Ответ отправил: Heartwork (статус: 1-ый класс)
Ответ отправлен: 12.01.2007, 08:10 Оценка за ответ: 5
Отвечает: Vasylega
Здравствуйте, Попов Николай!
Хочу дополнить ответ Данила.
Если в исходной таблицы повторяюющиеся значения, то при переносе их в новую таблицу:
- их надо объединять по определенному алгоритму (например суммирование);
- либо игнорировать;
В первом случае можно для второй таблицы сделать триггер на событие insert и заносить в него информацию спомощью select с обработкой повторяющихся строк.
Во втором случае просто (уже сказано в предыдущем ответе)
Ответ отправил: Vasylega (статус: 1-ый класс)
Ответ отправлен: 12.01.2007, 08:29
Отвечает: Grigory
Здравствуйте, Попов Николай!
Для извлечения уникальных значений используется DISTINCT:
SELECT DISTINCT(ИМЯ ПОЛЯ) FROM TABLE1;
Удачи!
Ответ отправил: Grigory (статус: 10-ый класс)
Ответ отправлен: 12.01.2007, 17:05 Оценка за ответ: 5 Комментарий оценки: Всем большое спасибо за ответы! Поставил DISTINCT в запрос и все получилось
Отвечает: Santana
Здравствуйте, Попов Николай!
я так понимаю надо исключить из выборки те уникальные ключи которые уже есть в целевой таблице? если оно, поробуй так
insert into target
select * from source
where id not in (select id from target)
Ответ отправил: Santana (статус: 8-ой класс)
Ответ отправлен: 12.01.2007, 18:56
Отвечает: Игорь Елизаров
Здравствуйте, Попов Николай!
Для формирования таблицы-вставки можно применить группировку данных по нужному атрибуту, при этом для остальных полей можно будет выбрать групповые операции (минимальное, максимальное или среднее значение, сумма)
например, берем общую сумму по ИД, и дату последней операции по ИД
select id , sum(cost) as [Общая Сумма], max(date_input) as [посленяя дата операции]
from test
group by id
Ответ отправил: Игорь Елизаров (статус: 9-ый класс)
Ответ отправлен: 12.01.2007, 19:05