Главная страница
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.007 c
6-1850
Beginer1
2002-11-01 20:48
2003.01.02
когда


1-1774
Checist [root]
2002-12-20 11:05
2003.01.02
Вопрос к Kabro (плиз ответь)


1-1770
Z-man7777
2002-12-20 09:45
2003.01.02
ini-файлы


14-1883
Demoniac
2002-12-13 23:12
2003.01.02
:) nichego sebe. kto zdes latinicu znayet?


1-1812
ТУПОЙ
2002-12-19 18:23
2003.01.02
Application Events