On-line: Andrey, Aleksandr_D, гостей 2. Всего: 4 [подробнее..]
АвторСообщение
администратор




Пост N: 1162
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.01.18 13:55. Заголовок: Есть кто с SQL хорошо дружит


Никак не могу придумать как запросом решить задачку:
Есть две таблицы Т1 и подчиненная Т2 ( связь по T1->ID и T2->ID_T1 т.е. при смене указателя Т1 , автоматом фильтруется Т2 на записи где Т2->ID_T1 == Т1->ID

структура Т1 :
ID - id текущей записи
A1 - поле данных 1
A2 - поле данных 2
A3 - поле данных 3

структура Т2 :
ID - id текущей записи
ID_Т1 - id записи из Т1
B1 - поле данных 1
B2 - поле данных 2
B3 - поле данных 3


Нужно в Т1 скопировать запись, ей автоматом присвоится уникальный ID
в Т2 скопировать все записи с ID_T1 равной ID из Т1 (ID которую копировали) и заменить во всех скопированных в Т2->ID_T1 на новое присвоенное T1->ID

как это делать через dbAppend() , FieldGet() и FieldPut() понятно. а можно ли это сделать одним SQL запросом ?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 5 [только новые]


администратор




Пост N: 1163
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.01.18 18:22. Заголовок: Haz пишет: Никак не..


Haz пишет:

 цитата:
Никак не могу придумать как запросом решить задачку:


Тема закрыта. Все же придумал. Все затевалось ради исключения лишнего трафика между клиентом и сервером.
В итоге несколько минут на клиенте, стали несколькими секундами на севере.
Ps. Сторед процедуру под частный случай писать не хотелось.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6703
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.01.18 19:02. Заголовок: Haz пишет: Все же п..


Haz пишет:

 цитата:
Все же придумал.


Ежели решение не очень длинное , то хотелось бы увидеть увидеть его в этой теме

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1164
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.01.18 19:52. Заголовок: Dima пишет: Ежели р..


Dima пишет:

 цитата:
Ежели решение ...... увидеть его в этой теме


Дим, в понедельник. Правда пришлось добавить сервисное поле в базу.
И еще, все соответственно под синтаксис SQL от ADS

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6704
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.01.18 20:48. Заголовок: Haz пишет: Дим, в п..


Haz пишет:

 цитата:
Дим, в понедельник.


Ждём понедельника тогда !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1165
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.01.18 13:22. Заголовок: Dima пишет: Ждём по..


Dima пишет:

 цитата:
Ждём понедельника тогда



Где то так. Пришлось добавить поле ID_SAV
 
DECLARE C1 CURSOR AS SELECT * FROM T1; // Объявили курсор по таблице
DECLARE C2 CURSOR

OPEN C1; // Открыть курсор

WHILE FETCH C1 DO // По всему курсору в цикле
INSERT INTO T1 ( A1, A2, A3 , ID_SAV) VALUES ( C1.A1, C1.A2, C1.A3 , C1.ID ) ; // добавить строку и заполнить ее из курсора , сохранив родительский ID
OPEN C2 AS SELECT * FROM T2 WHERE ID_T1 = C1.ID ; // открыть курсор подчиненной таблицы Т2
WHILE FETCH C2 DO // скопировать в цикле все строки , подменив на новый ID из Т1
INSERT INTO T2 ( B1, B2, B3 , ID_T1) VALUES ( C2.B1, C2.B2, C2.B3 , SELECT ID FROM T1 WHERE ID_SAV = C1.ID )
END WHILE;
CLOSE C2;

END WHILE;

CLOSE C1;



Поскольку у меня в каждой записи из Т1 соответствует несколько тысяч в Т2 и таких подчиненных таблиц штук 10, традиционным способом ( через dbAppend() ) приходилось на клиента тащить почти все с сервера.
Теперь с помощью SQL скрипта все это вертится сугубо на сервере. Мой французский SQL еще далек от совершенства, но работает же


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 452
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет