Как работает "РАЗЛИЧНЫЕ" (DISTINCT)
Когда вы используете РАЗЛИЧНЫЕ перед списком полей в операторе ВЫБРАТЬ, система 1С обрабатывает данные следующим образом:
Выбирает все строки, соответствующие условиям ИЗ и ГДЕ. Анализирует все поля, указанные в списке ВЫБРАТЬ РАЗЛИЧНЫЕ. Удаляет дублирующиеся строки, то есть оставляет только одну запись для каждой уникальной комбинации значений всех полей, перечисленных после РАЗЛИЧНЫЕ.
Пример: Представьте таблицу продаж:
|
|
Клиент |
Сумма |
|
Иванов |
ООО "Ромашка" |
1000 |
|
Петров |
ООО "Василек" |
1500 |
|
Иванов |
ООО "Ромашка" |
1200 |
|
Сидоров |
ООО "Лютик" |
800 |
|
Иванов |
ООО "Тюльпан" |
900 |
Пример 1: Без РАЗЛИЧНЫЕ
Фрагмент кода
ВЫБРАТЬ
Продажи. Менеджер
ИЗ
Документ. Продажи КАК Продажи
Результат:
- Иванов Петров Иванов Сидоров Иванов
Пример 2: С РАЗЛИЧНЫЕ для одного поля
Фрагмент кода
ВЫБРАТЬ РАЗЛИЧНЫЕ
Продажи. Менеджер
ИЗ
Документ. Продажи КАК Продажи
Результат:
- Иванов Петров Сидоров
(Вернулись только уникальные менеджеры)
Пример 3: С РАЗЛИЧНЫЕ для нескольких полей
Фрагмент кода
ВЫБРАТЬ РАЗЛИЧНЫЕ
Продажи. Менеджер,
Продажи. Клиент
ИЗ
Документ. Продажи КАК Продажи
Результат:
- Иванов, ООО "Ромашка" Петров, ООО "Василек" Сидоров, ООО "Лютик" Иванов, ООО "Тюльпан"
(В данном случае "Иванов, ООО "Ромашка"" встречается дважды в исходных данных, но в результате появляется только один раз, потому что комбинация "Иванов" и "ООО "Ромашка"" уникальна после отсева дубликатов).
Где это полезно?
- Получение списка уникальных значений: Например, получить список всех номенклатур, которые когда-либо продавались, всех клиентов, всех сотрудников, всех видов документов и т. д. Избегание дубликатов при объединении данных: При соединении нескольких таблиц (особенно ЛЕВОЕ СОЕДИНЕНИЕ), могут появляться дублирующиеся строки, если по одному ключу находится несколько соответствий. РАЗЛИЧНЫЕ помогает схлопнуть эти дубликаты до уникальных комбинаций. Формирование выпадающих списков: Для заполнения списков выбора в отчетах или обработках уникальными значениями из базы данных. Оптимизация производительности: В некоторых случаях использование РАЗЛИЧНЫЕ может быть быстрее, чем сначала выбирать все данные, а затем программно обрабатывать их на уникальность, так как фильтрация происходит на уровне СУБД.
Важные нюансы:
- Все поля: РАЗЛИЧНЫЕ применяется ко ВСЕМ полям, перечисленным после него. Если вы указали ВЫБРАТЬ РАЗЛИЧНЫЕ Поле1, Поле2, то уникальность будет определяться по Комбинации значений Поле1 и Поле2. Порядок не важен для уникальности, но может быть для результата: РАЗЛИЧНЫЕ не гарантирует определенный порядок возвращаемых строк. Если вам нужен отсортированный список, используйте УПОРЯДОЧИТЬ ПО. Влияние на производительность: Хотя в некоторых случаях РАЗЛИЧНЫЕ может оптимизировать, в других (особенно на очень больших выборках или при работе с длинными текстовыми полями) он может замедлить выполнение запроса, так как СУБД требуется дополнительное время для сортировки и сравнения данных на уникальность. Работа с NULL: Значения NULL (НЕОПРЕДЕЛЕНО в 1С) обрабатываются как равные друг другу при определении уникальности. То есть, если есть несколько строк с NULL в соответствующем поле, останется только одна. В запросах с агрегатными функциями: РАЗЛИЧНЫЕ можно использовать внутри агрегатных функций (например, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Поле)) для подсчета уникальных значений.
Пример использования в конструкторе запросов 1С:
В Конструкторе запросов 1С, опция "Различные" находится в верхней части окна запроса, обычно рядом с кнопками "Выполнить" или "Текст запроса". Вы просто ставите галочку напротив "Различные", и 1С добавит это ключевое слово в текст запроса.
Это мощный и часто используемый оператор в языке запросов 1С для работы с уникальными данными.