![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Мультивставка строк в таблицу - возможно ли это? [D5, MSSQL]
AM © (2002-12-11 14:36:00)Доброго всем дня!
Можно ли каким-либо образом в таблицу вставить одну и ту же строку несколько раз одним запросом SQL, кроме как тупо поочереди вставляя?
А поконкретнее стоит такая задача:
Например есть таблица:
Name Kol
-------------
Яблоки 2
Груши 1
Тыква 3
Надо сделать на основе нее таблицу:
Name
-------
Яблоки
Яблоки
Груши
Тыква
Тыква
Тыква
Как можно это сделать с минимальными потерями времени и ресурсов?
Неужели единственный вариант - это перебирать строки первой поочереди и вставлять нужное (Kol) количество в новую таблицу?
Если есть какие-либо соображения - буду благодарен.
AM (2002-12-11 15:51:00) [1]Упс ошибочка вышла:
For i:= 1 to Max(Kol) do
Begin
INSERT (Name) INTO Tab2( SELECT Name FROM Tab1WHERE kol >= i )
End;
AM (2002-12-11 15:48:00) [2]Во! Я придумал такой подход, он конечно не тоже - некоторый цикл, и на счет практической скорости не могу сказать, но уменьшает количество транзакций (операций вставки) намного, если кому интересно:
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 операции вставки.
neXt (2002-12-11 15:29:00) [3]Romkim, как select в операторе insert применять и ребёнок знает, а вопрост-то сводится к тому - как такой запрос получить, который от значение в поле множит число записей в результирующем наборе данных, кажется это просто не возможно в одном запросе сделать, так что только цикл.
Если очень хочется его можно и процедуру убрать, сути это не меняет.
Prooksius (2002-12-11 15:13:00) [4]Или ХП, внутри выбирать, как надо, а потом insert into table select * from ХП.
Romkin (2002-12-11 15:00:00) [5]Да просто
insert into table (a)
select a from table
и никаких транзакций!
Johnmen (2002-12-11 14:48:00) [6]Забавная задачка ! Практический ее смысл мне не понятен...
Тем не менее : можно и не пребирать, а получить количества запросом, но далее все равно 2+1+3 INSERT"ов...