Главная страница
    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.45 MB
Время: 0.004 c
4-1939
turonix
2002-11-15 22:40
2003.01.02
Какой API функцией можно изменить курсор мыши?


4-1940
Pars2
2002-11-15 13:14
2003.01.02
Запрет запуска приложения


14-1871
Rouse_
2002-12-13 01:03
2003.01.02
День рожденья AGA


14-1912
Almaren
2002-12-14 14:35
2003.01.02
Как узнать содержание активной записи в БД?


4-1941
Cosmic
2002-11-14 19:04
2003.01.02
Как закрыть DOS-окно?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский