Главная страница
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.01 c
14-1882
Дремучий
2002-12-13 19:13
2003.01.02
С праздником всех Андреев!


1-1836
TCrash
2002-12-21 11:03
2003.01.02
TTreeView в качестве навигатора


4-1926
alex134
2002-11-16 17:55
2003.01.02
хук на окно


14-1917
stone
2002-12-15 14:29
2003.01.02
Из корпоративной переписки (продолжение)


1-1798
Батник
2002-12-20 11:47
2003.01.02
Вопрос про батники в win98