Имя: Пароль:
1C
1С v8
Запрос. Левое соединение. Как получить только первый в правой части?
0 arsik
 
гуру
23.05.12
10:12
Есть 2 таблицы Номенклатура и ШтрихКоды.
Как запросом выбрать всю номенклатуру и для каждой номенклатуры 1й штрихкод.
Следующим запросом если в таблице номенклатуры 2 записи и у каждой 2 штрих кода. Результат будет 4 строки.Типа:

Номенклатура 1 - ШтрихКод1
Номенклатура 1 - ШтрихКод2
Номенклатура 2 - ШтрихКод3
Номенклатура 2 - ШтрихКод4


А мне хочется:

Номенклатура 1 - ШтрихКод1
Номенклатура 2 - ШтрихКод3


ВЫБРАТЬ
   Номенклатура.Ссылка,
   Штрихкоды.Штрихкод
ИЗ
   Справочник.Номенклатура КАК Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
       ПО (Штрихкоды.Владелец = Номенклатура.Ссылка)
1 Buster007
 
23.05.12
10:14
а почему ШтрихКод1, а не ШтрихКОд2?
2 zak555
 
23.05.12
10:16
вложенный запрос
3 butterbean
 
23.05.12
10:17
соединяй с
(ВЫБРАТЬ(Владелец,МАКСИМУМ(Штрихкод) ИЗ РегистрСведений.Штрихкоды КАК Штрихкоды
СГРУППИРОВАТЬ ПО Владелец) КАК Штрихкоды
4 Shurjk
 
23.05.12
10:17
Когда уже наконец введут в запросах оператор - "мне хочется" чтоб выбирал именно то что хочется, а то приходиться понимаешь разбираться как эти запросы работают. А то консоль сделали а "корректную" работу запросов формируемых с помощью нее не обеспечили  - явная не доработка.
5 SoulPower
 
23.05.12
10:17
ага, группировка нужна.
6 arsik
 
гуру
23.05.12
10:40
(1) Ну это в примере. В принципе подойдет любой.
(3) Точно. Как то не дошел, что можно через эту функцию сделать
Спасибо.
7 mikecool
 
23.05.12
10:41
ВЫБРАТЬ
   Номенклатура.Ссылка,
   Штрихкоды.Штрихкод
ИЗ
   Справочник.Номенклатура КАК Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
       ПО (Штрихкоды.Владелец = Номенклатура.Ссылка) И
            Штрихкоды.Штрихкод В (Выбрать Первые 1 ШтрихКод Из РегистрСведений.Штрихкоды Где Штрихкоды.Владелец = Номенклатура.Ссылка )
8 arsik
 
гуру
23.05.12
12:00
(7) Так я изначально хотел сделать, но мне показалось, что не комильфо. Не оптимально.
Проверил. Запрос через вложенный запрос (3) быстрее раза в 2, а в тестовой базе штрихкодов то почти нет.
9 wise
 
23.05.12
12:06
(4) +100500

:-)
10 Mkonst
 
23.05.12
12:11
а что никто не предложил такое:
ВЫБРАТЬ
   Номенклатура.Ссылка,
   Штрихкоды.Штрихкод
ИЗ
   Справочник.Номенклатура КАК Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
       ПО (Штрихкоды.Владелец = Номенклатура.Ссылка)
         и РегистрСведений.Штрихкоды в (&СписокНужныхШтрихкодов)
11 Humandra
 
23.05.12
12:15
(3) Можно не соединять, а сразу максимум брать
12 arsik
 
гуру
23.05.12
13:14
(10) &СписокНужныхШтрихкодов - а это мне откуда взять?
(11) Не понял.
13 Mkonst
 
23.05.12
13:19
(12) >> (10) &СписокНужныхШтрихкодов - а это мне откуда взять?
если текст вызывает затруднения используй (7)
14 УхТы
 
23.05.12
13:25
У меня аналогичная ситуация тока так с Макс не сделать...
Регистр ЦеныНоменклатурыКонтрагентов беру срез последних
имеим

Номенклатура1 | 150р |ООО "Рога"   | 01.04.12
Номенклатура1 | 200р |ООО "Копыта" | 01.05.12
А мне надо тока последнее по дате не зависимо от контрагента (контрагент лезит из ТипЦен.Владелиц)
15 УхТы
 
23.05.12
13:28
В запросе делаю ВЫБРАТЬ РАЗЛИЧНЫЕ, но он из-за владельца не считает их различными
16 arsik
 
гуру
23.05.12
13:28
На самом деле получился вот такой запросец

ВЫБРАТЬ
   Номенклатура.Ссылка,
   ШтрихКоды.Штрихкод
ИЗ
   Справочник.Номенклатура КАК Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           Штрихкоды.Владелец КАК Владелец,
           МАКСИМУМ(Штрихкоды.Штрихкод) КАК Штрихкод
       ИЗ
           РегистрСведений.Штрихкоды КАК Штрихкоды
       
       СГРУППИРОВАТЬ ПО
           Штрихкоды.Владелец) КАК ШтрихКоды
       ПО Номенклатура.Ссылка = ШтрихКоды.Владелец
ГДЕ
   Номенклатура.ТорговаяМарка = &ТорговаяМарка
17 Mkonst
 
23.05.12
13:37
(16) запрос из левого соединения вытащи во временную таблицу... уменьшишь время работы запроса
18 arsik
 
гуру
23.05.12
13:59
Он и так во временной.
19 Humandra
 
24.05.12
19:43
(12)
я имела в виду такое:

ВЫБРАТЬ
   Номенклатура.Ссылка,
   МАКСИМУМ(Штрихкоды.Штрихкод)
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
   ПО (Штрихкоды.Владелец = Номенклатура.Ссылка)
СГРУППИРОВАТЬ ПО Номенклатура.Ссылка

но это я так, чисто теоретически, что мол и так еще можно. А так, скорее всего оптимальнее будет сначала сгруппировать и потом соединить, потому что оптимизатор не всегда разруливает такие соединения.
Программист всегда исправляет последнюю ошибку.