|
|
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Здравствуйте всем! DB2 WSE 9.7 Есть таблица TAB1 (REG_NUM - рег.номер, NAM - наименование). Задан список рег. номеров (R1, R2, ..., RN). Необходимо разработать sql-скрипт (выборку), который бы вытаскивал все записи из TAB1 по заданному списку рег.номеров. При этом, если в TAB1 запись по рег.номеру отсутствует, то в результирующую выборку должен попасть рег.номер без наименования. То есть, мы должны получить выборку из N записей (по количеству записей заданного списка), в котором могут быть заполнены (не заполнены, или заполнены не все) наименования. Как это сделать одним селектом без промежуточных добавлений во временные таблицы? Пока на ум приходит вариант: Код: plsql 1. 2. 3. 4. 5. Но он как-то долго отрабатывает есть еще варианты? С уважением, Семен Попов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 18:56:36 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Если такой запрос как-то долго отрабатывает, значит, с планом что-то не так. Индекса нет, статистика не такая... Далее идёт NLJOIN с N полных сканирований TAB1 (совсем плохо) или HSJOIN (одно сканирование) - это получше (разумеется, при некоторых сочетаниях данных это, наоборот, хорошо). Скорее всего, быстрее всего он должен работать при наличии индекса unique ... on TAB1(reg_num) include(nam [и другие интересующие поля] ) По виду запроса, TAB1(reg_num) и так должен быть уникальным. Быть может, на самом деле вместо TAB1 подразумевается какой-то VIEW. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 22:10:12 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Victor Metelitsa, спасибо. Индексы посмотрим. Но я хотел бы узнать, вариант, который я предложил, будет единственным? В этом скрипте рег.номера перечисляются через запятую, каждое значение в скобках. Можно ли разработать скрипт, чтобы значения не нужно было заключать в скобки, а просто через запятую? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2015, 12:43:37 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Semen Popov, values 1, 2, 3 и values (1), (2), (3) это одно и то же. Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2015, 12:52:49 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, спасибо. Что-то я сам не догадался проверить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2015, 15:17:26 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
У меня других вариантов нет. Вещи наподобие Код: plsql 1. 2. 3. 4. 5. 6. мы ведь рассматривать не будем? ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2015, 15:58:00 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Victor Metelitsa, думаю, что не будем. Представьте, если список заданных номеров состоит из 10 тыс записей (N=10000) :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2015, 17:58:55 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Semen PopovVictor Metelitsa, думаю, что не будем. Представьте, если список заданных номеров состоит из 10 тыс записей (N=10000) :-))Если у вас такое огромное число значений может быть, то лучше через временную таблицу. Вставка записей, call admin_cmd('runstats on session.t with distribution'), основной запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2015, 18:14:14 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=39113301&tid=1600693]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 482ms |

| 0 / 0 |
