Форум: "Базы";
Текущий архив: 2003.01.02;
Скачать: [xml.tar.bz2];
ВнизМультивставка строк в таблицу - возможно ли это? Найти похожие ветки
← →
AM (2002-12-11 14:36) [0]Доброго всем дня!
Можно ли каким-либо образом в таблицу вставить одну и ту же строку несколько раз одним запросом SQL, кроме как тупо поочереди вставляя?
А поконкретнее стоит такая задача:
Например есть таблица:
Name Kol
-------------
Яблоки 2
Груши 1
Тыква 3
Надо сделать на основе нее таблицу:
Name
-------
Яблоки
Яблоки
Груши
Тыква
Тыква
Тыква
Как можно это сделать с минимальными потерями времени и ресурсов?
Неужели единственный вариант - это перебирать строки первой поочереди и вставлять нужное (Kol) количество в новую таблицу?
Если есть какие-либо соображения - буду благодарен.
← →
Johnmen (2002-12-11 14:48) [1]Забавная задачка ! Практический ее смысл мне не понятен...
Тем не менее : можно и не пребирать, а получить количества запросом, но далее все равно 2+1+3 INSERT"ов...
← →
Romkin (2002-12-11 15:00) [2]Да просто
insert into table (a)
select a from table
и никаких транзакций!
← →
Prooksius (2002-12-11 15:13) [3]Или ХП, внутри выбирать, как надо, а потом insert into table select * from ХП.
← →
neXt (2002-12-11 15:29) [4]Romkim, как select в операторе insert применять и ребёнок знает, а вопрост-то сводится к тому - как такой запрос получить, который от значение в поле множит число записей в результирующем наборе данных, кажется это просто не возможно в одном запросе сделать, так что только цикл.
Если очень хочется его можно и процедуру убрать, сути это не меняет.
← →
AM (2002-12-11 15:48) [5]Во! Я придумал такой подход, он конечно не тоже - некоторый цикл, и на счет практической скорости не могу сказать, но уменьшает количество транзакций (операций вставки) намного, если кому интересно:
1)Мы выбираем из первой таблицы макисмальное Kol.
2)А потом в цикле делаем вставку:
For i:= 1 to Max(Kol) do
Begin
INSERT (Name) INTO Tab2 ( SELECT Name FROM Tab2 WHERE kol >= i )
End;
// Извенюсь за некоторый псевдокод, но я думаю смысол понятен
То есть в данном примере вместо 2 + 1 + 3 вставок получается 3 операции вставки.
← →
AM (2002-12-11 15:51) [6]Упс ошибочка вышла:
For i:= 1 to Max(Kol) do
Begin
INSERT (Name) INTO Tab2 ( SELECT Name FROM Tab1 WHERE kol >= i )
End;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.01.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c