ЛЕВОЕ СОЕДИНЕНИЕ - как обеспечить уникальность в правой части #544571


#0 by DrLekter
В запросе временная таблица левым соединением объединяется с регистром сведений, в котором по объединяющему полю может быть несколько записей. Примерно так:  Таблица.Номенклатура, В Таблице Номенклатура уникальна, а в регистре в общем случае может быть больше одной записи с этим полем. Тогда запрос выбирает два поля Номенклатура, по одному для каждого соответствия Номенклатура-Поставщик. Как сделать, чтобы выбиралась только одна запись, даже все равно, какая из имеющихся, чтобы поле Номенклатура в результате запроса осталось уникальным?
#1 by byxtello
сгруппировать
#2 by DrLekter
Группирую, по Номенклатуре и По Поставщику
#3 by 5 Элемент
А какой смысл выбрать любое значение из ТоварыПоПоставщикам ?
#4 by DrLekter
Есть смысл, долго объяснять, вкратце - нужно быстро создать подтверждающие документы из, вероятно, большого списка товаров. В большинстве случаев поставщик один, но могут быть и варианты.
#5 by 5 Элемент
Если время выполнения запроса критично, то я бы сначала запихал во временную таблицу сгруппированные записи ТоварыПоПоставщикам с отбором по номенклатуре. А потом соединял.
#6 by DrLekter
Вот мне тоже такое в голову пришло, но думал, что ЛЕВОЕ СОЕДИНЕНИЕ может по-разному работать. В фокспрошном SQL умеет же и так, и так ))
#7 by DrLekter
Другой вариант - при обработке выборки в цикле искать первую запись в регистре, но при многих тысячах записей могут быть тормоза, да и зачем лишний раз систему грузить.
#8 by aleks-id
ВЫБРАТЬ    ВложенныйЗапрос.Поставщик ИЗ    Таблица        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1        ИЗ
#9 by Aprobator
че за бред? По одному товару может быть несколько поставщиков и надо выбрать случайного поставщика?
#10 by DrLekter
О, вот это я, наверное, и имел в виду )) Спасибо, пробую
#11 by DrLekter
Вопрос не в смысле задачи, а в методе решения ) Вместо Номенклатуры и Поставщика может быть что-то другое. В данном случае я вкратце объяснил, зачем это заказчику понадобилось.
#12 by Ёпрст
сам то понял, что бред написал ? Засада в том, что снеговик не поддерживает коррелированые подзапросы, в этом главный минус. Если не важен поставщик, то так: Выбрать Таблица.Номенклатура,  Таблица.Номенклатура = Рег.Номенклатура Сгруппировать По Таблица.Номенклатура
#13 by DrLekter
А МАксимум имеет смысл для нечисловых данных?
#14 by Aprobator
имеет.
#15 by DrLekter
Хм, действительно работает. Судя по результатам, Максимум выбирает последнюю запись по хронологии, Минимум - первую.
#16 by DrLekter
Спасибо всем, сам бы не скоро догадался )))
#17 by LAAry
Не по хронологии. По внутреннему идентификатору Рег.Поставщик
#18 by Dmitrii
бред написал
#19 by Aprobator
поздно - уже работает )))
#20 by Ёпрст
обоснуй.
#21 by Aprobator
да все норм. Перед пятницей травит )
#22 by DrLekter
Но сам-то идентификатор (значение его) нарастает последовательно (если я правильно понимаю), так что фактически получается по хронологии )
#23 by acsent
Не обязательно
#24 by Ёпрст
ид может прилететь из сторонней базы или быть слеплен руками.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С