Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как обойти конструкцию IN? / 9 сообщений из 9, страница 1 из 1
09.03.2016, 15:34
    #39188235
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти конструкцию IN?
Подозреваю, давно известная проблема, но решения найти не могу. FB2.1. Упрощённый запрос:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
select a.id_fac
from factor a
where a.id_comp in ( select m.id_mdl
                     from relgr r
                                inner join modul m on m.id_mdl=r.id_cmdl
                     where r.priz_gr is null and r.id_mdl=900415
                   )
order by a.id_fac


В этом случае идёт просмотр всей таблицы. Если вместо второго Select'а поставить явные значения, то всё в порядке, просмотр по индексу.
Есть решение? Может в более новых версиях?
...
Рейтинг: 0 / 0
09.03.2016, 15:39
    #39188251
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти конструкцию IN?
JOIN + DISTINCT или EXECUTE BLOCK.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.03.2016, 15:41
    #39188258
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти конструкцию IN?
запрос - хрень
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.03.2016, 15:56
    #39188300
olegenty
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти конструкцию IN?
а чем
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select distinct
    f.id_fac
from
    factor f
    inner join modul m on f.id_comp = m.id_mdl
    inner join reglr r on m.id_mdl = r.id_cmdl
where 
    r.priz_gr is null
    and r.id_id_mdl = 900415
order by a.id_fac


не подходит?
...
Рейтинг: 0 / 0
09.03.2016, 16:51
    #39188387
PEAKTOP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти конструкцию IN?
...
Рейтинг: 0 / 0
09.03.2016, 17:30
    #39188444
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти конструкцию IN?
PEAKTOP Отбор множества записей по ключам из другой таблицы (обход конструкции IN)
Это не работает, первым делом попробовал.
JOIN + DISTINCT работает. Не хотелось связывать (хотелось только фильтр наложить), но, видимо, придётся.
...
Рейтинг: 0 / 0
09.03.2016, 18:31
    #39188502
PEAKTOP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти конструкцию IN?
KreatorXXIPEAKTOP Отбор множества записей по ключам из другой таблицы (обход конструкции IN)

И с каких пор работа клиентского приложения для Firebird с таблицей или с хранимой процедурой отличается?
...
Рейтинг: 0 / 0
09.03.2016, 22:03
    #39188644
MikeDD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти конструкцию IN?
KreatorXXI,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select a.id_fac
 from factor a
 join (
  select m.id_mdl
   from relgr r
   inner join modul m on m.id_mdl=r.id_cmdl
   where r.priz_gr is null and r.id_mdl=900415
 ) s on s.id_mdl=a.id_comp
 order by a.id_fac
...
Рейтинг: 0 / 0
10.03.2016, 11:00
    #39188849
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти конструкцию IN?
MikeDD, спасибо! Похоже, то что надо. Супер!

PEAKTOPKreatorXXIпропущено...


И с каких пор работа клиентского приложения для Firebird с таблицей или с хранимой процедурой отличается?
Я имел ввиду, что использование "~" (тильд) всё равно приводит к перебору всех записей таблицы. А нужно отобрать используя индекс.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как обойти конструкцию IN? / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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