powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Помогите с запросом
9 сообщений из 9, страница 1 из 1
Помогите с запросом
    #39112569
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте всем!

DB2 WSE 9.7

Есть таблица TAB1 (REG_NUM - рег.номер, NAM - наименование). Задан список рег. номеров (R1, R2, ..., RN). Необходимо разработать sql-скрипт (выборку), который бы вытаскивал все записи из TAB1 по заданному списку рег.номеров. При этом, если в TAB1 запись по рег.номеру отсутствует, то в результирующую выборку должен попасть рег.номер без наименования. То есть, мы должны получить выборку из N записей (по количеству записей заданного списка), в котором могут быть заполнены (не заполнены, или заполнены не все) наименования.

Как это сделать одним селектом без промежуточных добавлений во временные таблицы?

Пока на ум приходит вариант:
Код: plsql
1.
2.
3.
4.
5.
with tmp (REG_NUM) as (values (R1),(R2),...,(RN))
select t.REG_NUM,
           a.NAM
from tmp as t
left join TAB1 as a on t.REG_NUM=a.REG_NUM



Но он как-то долго отрабатывает
есть еще варианты?

С уважением, Семен Попов
...
Рейтинг: 0 / 0
Помогите с запросом
    #39112699
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если такой запрос как-то долго отрабатывает, значит, с планом что-то не так. Индекса нет, статистика не такая... Далее идёт NLJOIN с N полных сканирований TAB1 (совсем плохо) или HSJOIN (одно сканирование) - это получше (разумеется, при некоторых сочетаниях данных это, наоборот, хорошо).

Скорее всего, быстрее всего он должен работать при наличии индекса
unique ... on TAB1(reg_num) include(nam [и другие интересующие поля] )

По виду запроса, TAB1(reg_num) и так должен быть уникальным. Быть может, на самом деле вместо TAB1 подразумевается какой-то VIEW.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39113030
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Metelitsa, спасибо. Индексы посмотрим. Но я хотел бы узнать, вариант, который я предложил, будет единственным? В этом скрипте рег.номера перечисляются через запятую, каждое значение в скобках. Можно ли разработать скрипт, чтобы значения не нужно было заключать в скобки, а просто через запятую?
...
Рейтинг: 0 / 0
Помогите с запросом
    #39113041
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Semen Popov,

values 1, 2, 3
и
values (1), (2), (3)
это одно и то же.

Код: sql
1.
2.
3.
select t.REG_NUM, a.NAM
from table (values 1, 2, 3) t(REG_NUM) 
left join table (values (1, 'Nam1'), (4, 'Nam4')) a (REG_NUM, NAM) on t.REG_NUM=a.REG_NUM;
...
Рейтинг: 0 / 0
Помогите с запросом
    #39113228
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein, спасибо. Что-то я сам не догадался проверить :)
...
Рейтинг: 0 / 0
Помогите с запросом
    #39113301
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня других вариантов нет. Вещи наподобие
Код: plsql
1.
2.
3.
4.
5.
6.
with tmp (REG_NUM) as (
  select R1 from dual union all
  select R2 from dual union all
  ,...,
  select RN from dual
)... и т.д.


мы ведь рассматривать не будем? ;-)
...
Рейтинг: 0 / 0
Помогите с запросом
    #39113456
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Metelitsa, думаю, что не будем. Представьте, если список заданных номеров состоит из 10 тыс записей (N=10000) :-))
...
Рейтинг: 0 / 0
Помогите с запросом
    #39113472
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Semen PopovVictor Metelitsa, думаю, что не будем. Представьте, если список заданных номеров состоит из 10 тыс записей (N=10000) :-))Если у вас такое огромное число значений может быть, то лучше через временную таблицу.
Вставка записей, call admin_cmd('runstats on session.t with distribution'), основной запрос.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39115274
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein, к сожалению условие есть условие. Никахих временных таблиц и тому подобное
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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