Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Повторно использовать результаты выборки внутри ХП / 16 сообщений из 16, страница 1 из 1
19.10.2017, 14:46
    #39538755
Kirill Razuvaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
Добрый день!
Из неиндексированной внешней таблицы осуществляется выборка, на основе которой далее делаются несколько других выборок с дополнительными условиями. Возможно ли сохранить каким-то образом исходную выборку, чтобы фильтровать уже с доп.условиями ее, а не всю исходную таблицу?
Т.е., исходно есть цикл вида
Код: sql
1.
for select F1, F2, F3 from Table1 where F1=:x1 into ...


А после того, проходят "уточняющие" подзапросы (критерии отбора условны)
Код: sql
1.
2.
for select F1, F2, F3 from Table1 where F1=:x1 and F2<F3 into ...
for select F1, F2, F3 from Table1 where F1=:x1 and F2 between (2 and 18) into ...


Преобразовать хочется во что-то типа
Код: sql
1.
2.
3.
for select F1, F2, F3 from VV into ...
for select F1, F2, F3 from VV where F2<F3 into ...
for select F1, F2, F3 from VV where F2 between (2 and 18) into ...


где VV -
Код: sql
1.
select * from Table1 where F1=:x1



Повторюсь, таблица внешняя, большая. Повторные "уточняющие" запросы выливаются в повторные проходы по всей таблице.
...
Рейтинг: 0 / 0
19.10.2017, 14:56
    #39538765
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
Kirill Razuvaev> Возможно ли сохранить каким-то образом исходную выборку,
Kirill Razuvaev> чтобы фильтровать уже с доп.условиями ее, а не всю исходную таблицу?

Версия FB какая? GTT.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.10.2017, 14:57
    #39538769
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
Kirill Razuvaev,

делай в один проход, по ходу дела формируя результат(ы):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
for select F1, F2, F3 from Table1 where (F1=:x1) and ( (F2<F3) or (F2 between (2 and 18)) )
  into :pF1, :pF2, pF3 do begin
  if (F1=:x1) then begin

  end
  if (F2 between (2 and 18)) then begin

  end
end
...
Рейтинг: 0 / 0
19.10.2017, 14:58
    #39538770
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
Kirill Razuvaev,

нет ничего такого сделать нельзя. Максимум какой-нибудь трюк с переливкой в GTT и затем уже фильтровать по ней
...
Рейтинг: 0 / 0
19.10.2017, 16:20
    #39538889
Kirill Razuvaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
Гаджимурадов РустамВерсия FB какая? GTT.2.5.7
...
Рейтинг: 0 / 0
19.10.2017, 16:22
    #39538892
Kirill Razuvaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
чччДделай в один проход, по ходу дела формируя результат(ы):К сожалению, это не реально. Первая выборка вообще идет по части полей с distinct. Остальные - "копают" глубже, но каждая в свою сторону.
...
Рейтинг: 0 / 0
19.10.2017, 16:30
    #39538907
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
Kirill Razuvaev> 2.5.7

Ну так юзай GTT, ты же не маленький.
Там вопрос только когда её чистить -
на автомате транзакцией или вручную
в начале/конце ХП.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.10.2017, 16:55
    #39538938
Kirill Razuvaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
Гаджимурадов РустамНу так юзай GTTПохоже, придется в нее в цикле сначала скидывать "широкую" выборку, а дальше фильтровать из GTT с нужными фильтрами, очищаяя GTT между итерациями внешнего цикла.
...
Рейтинг: 0 / 0
19.10.2017, 17:08
    #39538958
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
Kirill Razuvaev> Похоже, придется ... дальше фильтровать из GTT с нужными фильтрами

Это уже от твоих фильтров и механики зависит.
Вариантов больше одного. Можно попытаться
объединить фильтры в один и накатить разом.
Если фильтры непересекающиеся и сортировка
неважна - можно делать suspend в каждом цикле.

В бщем, если хочешь чтобы подсказали, как лучше -
уточняй про фильтры и как они формируются и
может чего и придумаем.

Kirill Razuvaev> очищаяя GTT между итерациями внешнего цикла.

Что тут есть внешний цикл? Обращение к внешней таблице?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.10.2017, 17:11
    #39538962
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
Если исходная выборка без дико сложного для движка СУБД условия, то повторная выборка должна быть существенно быстрее, ибо как минимум ОС кэширует считываемые данные.
Я к тому, что сия возня, возможно, ничего и не даст.
...а может, и даст. Например, если в "хранимой промежуточной выборке" для последующей обработки задействуются индексы.
...
Рейтинг: 0 / 0
19.10.2017, 17:17
    #39538968
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
чччД> Если исходная выборка без дико сложного для движка СУБД условия,
чччД> Я к тому, что сия возня, возможно, ничего и не даст.


Кстати, да, проверять надо, если есть возможность.
Всё-таки ET это не какой-то внешний источник/БД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.10.2017, 10:28
    #39539364
Kirill Razuvaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
Гаджимурадов РустамЧто тут есть внешний цикл? Обращение к внешней таблице?
Суть задачи - импорт внешних данных с нормализацией в соответствии со схемой БД. В импортируемой таблице три уровня данных и первичные ключи, соответственно, на первом уровне F1, на втором F1-F2, на третьем F1-F2-F3, если грубо. Плюс на каждом уровне дополнения из фильтров, чтобы пропустить (не добавлять, не обновлять) некоторые записи.
Пока склоняюсь к необходимости такого эксперимента:
1. Последовательно выбираем из исходной таблицы все записи для каждого значения F1=x, и вставляем их в предварительно очищенную GTT.
2. Все "уточняющие" выборки делаем уже из GTT.
...
Рейтинг: 0 / 0
20.10.2017, 10:33
    #39539370
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
Kirill Razuvaev,

нормальный вариант
...
Рейтинг: 0 / 0
20.10.2017, 10:53
    #39539394
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
Kirill Razuvaev> на первом уровне F1, на втором F1-F2, на третьем F1-F2-F3

Это очередной КЛАДР какой-то?

> Пока склоняюсь к необходимости такого эксперимента:
> 1. Последовательно выбираем из исходной таблицы все
> записи для каждого значения F1=x, и вставляем их в GTT.

Вариант как вариант, но в зависимости от объёмов данных
я бы подумал о том, чтобы сразу залить все данные в одну
или несколько GTT, вместо того чтобы для каждого F1
наружу запрос делать. Хотя если их очень много, то ХЗ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.10.2017, 10:58
    #39539397
Kirill Razuvaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
Коллеги,
пользуясь случаем, хотел бы еще привлечь внимание к ранее заданному мною вопросу, ответов на который пока не поступило: Сервером заменяется тип поля при группировке в представлении
...
Рейтинг: 0 / 0
20.10.2017, 11:02
    #39539403
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторно использовать результаты выборки внутри ХП
Kirill RazuvaevГаджимурадов РустамЧто тут есть внешний цикл? Обращение к внешней таблице?
Суть задачи - импорт внешних данных с нормализацией в соответствии со схемой БД. В импортируемой таблице три уровня данных и первичные ключи, соответственно, на первом уровне F1, на втором F1-F2, на третьем F1-F2-F3, если грубо. Плюс на каждом уровне дополнения из фильтров, чтобы пропустить (не добавлять, не обновлять) некоторые записи.
Пока склоняюсь к необходимости такого эксперимента:
1. Последовательно выбираем из исходной таблицы все записи для каждого значения F1=x, и вставляем их в предварительно очищенную GTT.
2. Все "уточняющие" выборки делаем уже из GTT.

Вот мне все равно непонятно
чем не угоден вариант - загнать все скопом в GTT и уже работать с ней забыв про внешнюю таблицу
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Повторно использовать результаты выборки внутри ХП / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]