Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.02;
Скачать: CL | DM;

Вниз

Мультивставка строк в таблицу - возможно ли это?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
1-1830
delpher_gray
2002-12-17 16:45
2003.01.02
CommPortDriver


8-1842
}{enon
2002-09-16 18:19
2003.01.02
Помогите media-чайнику стать самоваром!


1-1787
smok_er
2002-12-20 12:27
2003.01.02
ReadLn и перемещение к началу файла


6-1856
Sers
2002-11-05 17:34
2003.01.02
Програмно проскроллировать WebBrowser


1-1786
kingdom
2002-12-19 18:19
2003.01.02
Как послать письмо программно?