Имя: Пароль:
1C
1С v8
Выбрать уникальных регистраторов из нескольких регистров
0 bolero
 
04.11.14
15:19
Есть задача получить список документов, в которых встречается определенная комбинация номенклатуры и характеристики (УТ11).

Чтобы не перебирать в каждом документе табличные части, можно спросить в нескольких регистрах:

ВЫБРАТЬ
    РН1.Регистратор
ИЗ
    РегистрНакопления.ТоварыНаСкладах КАК РН1
ГДЕ
    РН1.Номенклатура = &Номенклатура
    И РН1.Характеристика.Ссылка ЕСТЬ NULL



ВЫБРАТЬ
    РН2.Регистратор
ИЗ
    РегистрНакопления.ЗаказыКлиентов КАК РН2
ГДЕ
    РН2.Номенклатура = &Номенклатура
    И РН2.Характеристика.Ссылка ЕСТЬ NULL

Оба запроса возвращают в составе ответа одни и те же реализации.

Как правильно объеденить результаты, чтобы каждый документ встречался только один раз?
1 Armando
 
04.11.14
15:24
Объединить
2 shuhard
 
04.11.14
15:28
(1) +1
и поверх пустить РАЗЛИЧНЫЕ
3 bolero
 
04.11.14
15:36
(1) (2) не понимаю как объединить, даже на обычном sql, не то что на желтом
LEFT JOIN выдаст несколько колонок
4 spero
 
04.11.14
15:42
(3) Кроме JOIN есть еще UNION.
5 bolero
 
04.11.14
15:51
(4) Вкурил!


ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВремЗапрос.Регистратор
ИЗ
(ВЫБРАТЬ
    РН.Регистратор
ИЗ
    РегистрНакопления.ТоварыНаСкладах КАК РН
ГДЕ
    РН.Номенклатура = &Номенклатура
    И РН.Характеристика = &Характеристика

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    РН.Регистратор
ИЗ
    РегистрНакопления.ЗаказыКлиентов КАК РН
ГДЕ
    РН.Номенклатура = &Номенклатура
    И РН.Характеристика = &Характеристика
) КАК ВремЗапрос
6 Armando
 
04.11.14
17:09
можно и без вложенного запроса:

выбрать различные
объединить
выбрать различные
7 bolero
 
04.11.14
17:20
(6) не, так не надо

1-й "выбрать различные" возвращает список документов, в т.ч. реализации

2-й "выбрать различные" возвращает другой список документов, но включающий те же реализации из первого запроса

так что лучше в конце один раз сделать DISTINCT
8 vi0
 
04.11.14
17:23
(7) почему лучше?
9 shuhard
 
04.11.14
17:27
(7) у Объединить есть предикатив ВСЕ, без него он неявно содержит в себе различные
10 Armando
 
04.11.14
17:30
(7) Без замера я бы не стал так утверждать.
11 Armando
 
04.11.14
17:30
(10) возразить тоже не могу, ибо не замерял
12 bolero
 
04.11.14
22:16
(7) (8) (9) (10) замерил

выбрать различные + объединить все + выбрать различные дает дублирующиеся результаты

выбрать различные + объединить + выбрать различные дает правильный результат

Приз за знание желтого sql уходит shuhard

В итоге запрос выглядит так:


    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |        РН.Регистратор
    |    ИЗ
    |        РегистрНакопления.ТоварыНаСкладах КАК РН
    |    ГДЕ
    |        РН.Номенклатура = &Номенклатура
    |        И РН.Характеристика = &Характеристика
    |
    |    ОБЪЕДИНИТЬ
    |
    |    ВЫБРАТЬ РАЗЛИЧНЫЕ
    |        РН.Регистратор
    |    ИЗ
    |        РегистрНакопления.ЗаказыКлиентов КАК РН
    |    ГДЕ
    |        РН.Номенклатура = &Номенклатура
    |        И РН.Характеристика = &Характеристика
    |    
    |";
13 vi0
 
04.11.14
22:51
(12)
> выбрать различные + объединить все + выбрать различные дает дублирующиеся результаты
а тебе этого никто не советовал

> выбрать различные + объединить + выбрать различные дает правильный результат
это тебе посоветовали в (6)

а под замером подразумевалось оптимальность твоего запроса и того, что в 6 посоветовали