powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Повторно использовать результаты выборки внутри ХП
16 сообщений из 16, страница 1 из 1
Повторно использовать результаты выборки внутри ХП
    #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
Повторно использовать результаты выборки внутри ХП
    #39538765
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirill Razuvaev> Возможно ли сохранить каким-то образом исходную выборку,
Kirill Razuvaev> чтобы фильтровать уже с доп.условиями ее, а не всю исходную таблицу?

Версия FB какая? GTT.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Повторно использовать результаты выборки внутри ХП
    #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
Повторно использовать результаты выборки внутри ХП
    #39538770
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirill Razuvaev,

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

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

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

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

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

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


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

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

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

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

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

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


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