Использование ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ в языке запросов 1С
Зачастую даже опытные программисты допускают методическую ошибку при использовании конструкций ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ в языке запросов 1С 8. Рассмотрим подробнее, чем различаются эти конструкции и как их правильно использовать.
Конструкции ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ в языке запросов 1С 8.3
Конструкция ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ объединяет два результата запроса в один. Т.е. результат выполнения двух запросов будет «слит» в один, общий.
Пример запроса для вывода всех документов поступлений и реализации:
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПоступлениеТоваровУслуг.Ссылка
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
Запрос получит данные из двух таблиц и объединит их.
В чем же разница между ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ
Конструкция ОБЪЕДИНИТЬ сливает два результата и группирует повторяющие строки, в отличие от ОБЪЕДИНИТЬ ВСЕ, которая не группирует автоматически строки результата.
Настоятельно рекомендуется использовать ОБЪЕДИНИТЬ ВСЕ в запросах, где заведомо невозможно получения одинаковых строк. Это существенно повышает производительность – система не пытается группировать строки.
Читайте также — описание языка запросов 1С.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Alexander:
Ужас, разочаровывает что в 1С применены созвучные с SQL ключевые слова но их результат не предсказуем.
Как следствие люди переходят на 1С пишут запросы. Вместо LEFT JOIN у них получается какой-то INNER JOIN.
Да и сложно так писать запросы. «ОБЪЕДИНИТЬ ВСЕ» — что значит «все» даже не представляю. Теперь UNION называется сочетанием двух слов.
И ещё весело что целое поколение «программистов» пишущих на 1С никогда не писали на других языках и даже не удивляются подобному странному поведению. Хотя новички вижу до некоторой поры верят что «ЛЕВОЕ СОЕДИНЕНИЕ» реально вернет либо NULL либо одну строку. Видимо приток этих программистов происходит из смежных языков где царит стандартизация.
Программист 1С:
Слово всё «ВСЕ» группирует результат запроса по совпадающим колонкам.
Сколько людей — столько и мнений 🙂
Язык запросов 1С — это не T-SQL и никто не говорит что оно одно и тоже.
Не понял вашего замечания про ЛЕВОЕ СОЕДИНЕНИЕ и LEFT JOIN. Они ничем не отличаются в sql и 1С.
андрей:
Все правильно человек говорит.
IGOR:
— «ОБЪЕДИНИТЬ ВСЕ» — что значит «все» даже не представляю.
UNION ALL
Сергей:
Про «Левое соединение» вы написали какой-то бред. Я, конечно, в 1С8 пока ещё новичок и до этого работал с SQL, но пока ещё ни разу при использовании (Левого/Правого) Соединения не получал неожиданного для меня результата. Может дело в том, что вы просто не представляете, что творится в ваших таблицах?
быдлокот:
https://ru.wiktionary.org/wiki/%D1%81%D0%BD%D0%BE%D0%B1%D0%B8%D0%B7%D0%BC
Николай Дмитриев:
а ты поменьше разочаровывайся и займись полезными делами…
Аноним:
Жутко навязывать свою логику создателям языка программирования
Maxim:
Зачем вы пишите эти глупости.
rinik:
Left Join в скуле работает точно так же, как в 1С.
В скуле есть аналог ОБЪЕДИНИТЬ ВСЕ — это UNION ALL. Если вы не представляете, что значит «все», то вы не разбираетесь ни в языке запросов 1С, ни в SQL.
Дмийтерий:
Alexander !!
Поздравляю Вас!
Ваша критика языка 1С — бессодержательна и, как следствие, не конструктивна и являет собой пример отъявленного (но не самопроявленного) снобизма и неуместного высокомерия.
андрей:
Автор первого комментария
Alexey:
Язык запросов 1С — очень похож на t-sql.
Left join в t-sql имеет такую же конструкцию и в 1C и называется Левое Соединение, более того, можно его и по английски написать Left join и 1С вас поймет…
Слово всё «ВСЕ» НЕ группирует результат запроса по совпадающим строкам. А вот ОБЪЕДИНИТЬ — группирует, к тому же и способствует притормаживанию системы, при больших массивах данных.
Гость:
Левое соединение может задвоить строки результата, если задвоены строки соединяемой таблицы. Вот о чём шла речь выше.
Гость:
присоединяемой
Алексей:
Более того, если по полям соединения есть две и более строк в одной строке, то задвоит, затроит и т.д. записи в итоговой таблицу не только левое соединение, но и внутреннее, и правое, и полное соединение, плотому что это логика реляционных баз данных.
Максим:
Если бы в среде программирования была возможность заменить любое название ключевого слова на любое другое, все проблемы бы решились. Например, вместо «ОБЪЕДИНИТЬ ВСЕ» Вы бы указали среде «ОБЪЕДИНИТЬ». А вместо «ОБЪЕДИНИТЬ», указали «ОБЪЕДИНИТЬ И СГРУППИРОВАТЬ». Но с возможностью по нажатию одной кнопки привести текст к стандартному виду (и обратно), чтобы Ваш коллега мог прочитать модуль в привычном для него виде. А Вы читаете как Вам удобно. Причем этот принцип можно использовать для любых языков программирования. Как-то так. Ну теперь можно набрасываться на идею кто очень хочет покритиковать. Это же здорово подрывает «великий» англосаксонский принцип доминирования и принуждения всех и везде писать только на англоязычных языках программирования.