Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2010, 21:07   #1
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию Вставка строк не в конец таблицы

Задача вставить строку после определенной строки. Например, есть таблица Т(ID, F1, F2), и нужно после строчки с F1 = 10 вставить строчку со значениями полей F1 = 20, F2 = значению F2 в строчке, после которой вставляем (с F1 = 10). ID автоинкрементируется. Помогите пожалуйста разобраться, знаю очень мало приемов языка SQL.
cw_o вне форума Ответить с цитированием
Старый 14.08.2010, 06:53   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

То, о чём Вы пытаетесь рассказать, противоречит основам реляционных СУБД, и, соответственно, не может быть реализовано через вставку данных через Insert !

В таблице нет понятия "первая строка", "вторая строка", "строка, следующая за...". Просто вставляйте запись, обеспечив заполнение данных так, чтобы, при необходимости, написав запрос SELECT .. from ... ORDER BY получить данные в нужном порядке.
И всё.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.08.2010, 10:34   #3
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию

Вот, я тоже думала о сортировке, но по заданию нужно обойтись одним запросом. Либо можно написать процедуру TSQL. А можно ли средствами TSQL решить указанную задачу?
cw_o вне форума Ответить с цитированием
Старый 14.08.2010, 16:42   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

нет. Поймите же, даже если вы напишете
Insert into Table1 ... values (1..);
Insert into Table1 ... values (2..);
то, согласно принципам организации реляционных СУБД,
нет гарантий, что строчка 2 будет идти после строчки 1
Именно поэтому, если порядок имеет какое-либо значение, нужно использовать ORDER BY

p.s. в реальной жизни, в 99% случаев строчка 2 будет идти после строчки 1.. но забиваться на это я бы лично не стал. Ибо - это противоречит теории.

p.p.s. А Вы уверены, что задание поняли/передали правильно? Кто такие задания придумывает?!

ДОБАВЛЕНО!
А какая СУБД?! Может быть в ней (вопреки теории) есть возможность добавлять данные после определённой строки?!

Последний раз редактировалось Serge_Bliznykov; 14.08.2010 в 16:45.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.08.2010, 18:52   #5
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Когда я делал одно приложение с помощью Access, там удавалось обычно вставлять данные похожим образом. По крайней мере порядок был обычно такой.
motorway вне форума Ответить с цитированием
Старый 14.08.2010, 21:13   #6
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию

Serge_Bliznykov,
тоже не совсем понимаю задание, видимо требуется уточнить у составителя. Но там русским языком написано вставить запись такую-то после записи такой-то. К СУБД требований нет, делаю в MS SQL Server 2005 Express. Спасибо за ответ, остановлюсь пока на order by.
motorway,
можно поподробнее, как вставляли и какой порядок получали?
cw_o вне форума Ответить с цитированием
Старый 19.08.2010, 00:28   #7
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Это было приложение, использующее компонент WebGrid от одной иностранной фирмы. При операциях с этим гридом (таблицей) вызываются запросы. Там вроде бы просто был обычный запрос типа INSERT ... и SELECT, во всяком случае порядок строк при выводе был всегда один и тот же и нужный мне. Специальных сортировок и т.п. не было. База аксессовская .mdb. Код на C#
motorway вне форума Ответить с цитированием
Старый 29.08.2010, 22:47   #8
gashek
 
Регистрация: 21.03.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
нет. Поймите же, даже если вы напишете
Insert into Table1 ... values (1..);
Insert into Table1 ... values (2..);
то, согласно принципам организации реляционных СУБД,
нет гарантий, что строчка 2 будет идти после строчки 1
Именно поэтому, если порядок имеет какое-либо значение, нужно использовать ORDER BY

p.s. в реальной жизни, в 99% случаев строчка 2 будет идти после строчки 1.. но забиваться на это я бы лично не стал. Ибо - это противоречит теории.

p.p.s. А Вы уверены, что задание поняли/передали правильно? Кто такие задания придумывает?!

ДОБАВЛЕНО!
А какая СУБД?! Может быть в ней (вопреки теории) есть возможность добавлять данные после определённой строки?!
Тут вопрос даже не как данные хранятся в БД, а как они извлекаются запросом.
Если существует первичный ключ по полю то запись с id 1 всегда, со 100% вероятностью, будет возвращаться перед записью с id 2, если не указан порядок сортировки.
gashek вне форума Ответить с цитированием
Старый 30.08.2010, 07:38   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Если существует первичный ключ по полю то запись с id 1 всегда, со 100% вероятностью, будет возвращаться перед записью с id 2, если не указан порядок сортировки.
Глупости.
ни о каких 100% и речи быть не может.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.08.2010, 07:48   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Задача вставить строку после определенной строки.
А что за проблема хранить еще одно поле -указывающее виртуальный номер записи.
Вставляешь новую. В это поле вбиваешь ее фактический индекс, и все остальные где индекс более вставленного увеличиваешь на единицу.
Код:
update set [Виртуальный индекс]=[Виртуальный индекс]+1 where [Виртуальный индекс]>Того что вставляем
Цитата:
Глупости.
Ну вообще-то доля правды тут есть, просто высказывание само по себе не уточненное. Если я отсортирую по этому полю то соответственно 100% соблюдение будет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вставка символа "конец строки" (Pascal) ТаняН Помощь студентам 2 05.06.2010 15:08
Вставка из другой таблицы Graggis1 Microsoft Office Access 5 20.08.2009 18:46
Перенести первые k строк в конец массива, соблюдая порядок их следования. umiko Microsoft Office Excel 1 16.05.2009 08:29
Вставка строки из таблицы Tanusha SQL, базы данных 0 16.03.2009 10:19
Вставка пустых строк в FastReport'е Boatswain БД в Delphi 1 13.11.2008 14:41