Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.56 MB
Время: 0.024 c
14-1911
angelant
2002-12-15 13:47
2003.01.02
Dos... Дисковая операционная система - есть люди, зна... команды?


14-1913
Uncle Archi
2002-12-11 22:58
2003.01.02
Звуки


4-1930
Odd_1
2002-11-16 13:25
2003.01.02
mouse


6-1851
X-shadow
2002-11-05 06:16
2003.01.02
Вопрос про WinSock и отправку письма.


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский