Имя: Пароль:
1C
 
ОБЪЕДИНИТЬ - выборка всегда упорядочена по порядку таблиц?
0 RomaH
 
11.10.23
10:18
Собственно
допустим ... ищу человека по ФИО + др + снилс
потом только по ФИО + др
Потом только по ФИО

объединяю полученные таблицы

надо получить наиболее достоверную запись

всегда ли записи из третьей таблицы будут "ниже" записей из первой?
1 Смотрящий
 
11.10.23
10:19
Неа
2 Timon1405
 
11.10.23
12:00
выбрать 1 как приоритет
ОБЪЕДИНИТЬ
выбрать 2 как приоритет
...
упорядочить по приоритет
3 АгентБезопасной Нацио
 
11.10.23
12:02
простая выборка никогда не гарантирует какой-либо упорядоченности, если упорядочивание не указано специально
4 Fedor-1971
 
11.10.23
12:31
(0) Для Объединить - нет, 1с пытается типа вернуть полученную таблицу
Если очень хочешь иметь данные всех 3 таблиц в выборке,
то используй Объединить ВСЕ - тогда данные будут располагаться в порядке их добавления в выборку
5 RomaH
 
11.10.23
15:00
типа свернуть?
6 RomaH
 
11.10.23
15:01
(2) так, наверное правильнее - сразу понятно что имеется в виду
7 Chai Nic
 
11.10.23
15:07
SQL никогда не гарантирует упорядоченность, при отсутствии явного указания порядка. И нельзя на это рассчитывать. Даже если в одной версии это так, нет никакой гарантии, что в другой будет иначе.
8 SleepyHead
 
11.10.23
15:18
(0)

Пример из реальной жизни, база студентов

Курицина Антонина Сергеевна 20.02.2002 СНИЛС = ХХХ-ХХХ-ХХХ ХХ
Иванова Антонина Сергеевна 20.02.2002
Курицина Антонина Сергеевна

Какая запись тут самая достоверная? Мы-то знаем, что она сменила фамилию, но как ты определяешь достоверность записи?
9 Fedor-1971
 
11.10.23
15:23
(5) Да, объединить пытается максимально заполнить совпадающие поля и не факт, что записи будут хотя бы в примерном порядке добавления (и, тупо, могут дозаполниться поля в последующих выборках после ОБЪЕДИНИТЬ или остаться одна запись с максимально заполненными полями)

(7) в отдельной выборке записи будут в произвольном порядке, но в ОБЪЕДИНИТЬ ВСЕ будут кластеры записей из каждой порции объединяемых данных. Штатно различить их нет возможности, если только добавить признак как в (2)
10 АгентБезопасной Нацио
 
11.10.23
15:25
(9) чем гарантируется такой порядок? есть ли об этом что-то в какой-нибудь документации?
11 Fedor-1971
 
11.10.23
15:28
(8) ТС имеет в виду, "лесенку" записей: т.е. Сначала заполнены все поля, потом без последнего, потом без 2-х последних и т.д.

Просто при обработке нужно понимать, запись какого раздела нашли, т.е. в случае с (2), наиболее достоверна запись с приоритетом 1
12 Fedor-1971
 
11.10.23
15:29
(10) Да, в описании языка запросов, типа Объединить пытается совмещать данные, а Объединить ВСЕ нет и работает быстрее.
Если правильно помню, то в каких-то рекомендациях 1С встречал
13 АгентБезопасной Нацио
 
11.10.23
15:31
(12) Еще раз: есть ли в документации про порядок данных, если специально ен задано упорядочивание?
14 SleepyHead
 
11.10.23
15:31
(11) Технически верно, по существу он таких не сопоставит правильно.
15 Fedor-1971
 
11.10.23
15:36
(14) Вот, смотри тут: Справка - Содержание справки - Встроенный язык -Работа с запросами - Ключевые слова и функции - Ключевые слова - ОБЪЕДИНИТЬ

В языке запросов имеется возможность объединять несколько запросов. При этом записи, полученные с помощью каждого из объединяемых запросов, будут собраны в один результат запроса.
При объединении каждый запрос собирает данные независимо, а такие операции, как упорядочивание результатов и расчет итогов выполняются уже над результатом объединения запросов.
Поля результата запроса будут называться так, как описано в списке полей выборки первого из объединяемых запросов. Поля выборки остальных запросов сопоставляются с полями результата в соответствии с порядком их следования в списке полей выборки. Объединяемые запросы должны иметь одинаковое количество полей в списке полей выборки.
Если поля выборки объединяемых запросов имеют разный тип, то поля результата запроса будут иметь составной тип.
Объединение запросов описывается по следующему правилу:
<Объединение запросов>
         |
    ОБЪЕДИНИТЬ [ВСЕ] <Описание запроса> [<Объединение запросов>]
Объединение запросов начинается с обязательного ключевого слова ОБЪЕДИНИТЬ, после которого следует описание присоединяемого запроса. Далее может присоединяться еще один запрос и т. д.
По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные разными запросами, заменяются одной. Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое слово ВСЕ.
16 Fedor-1971
 
11.10.23
15:37
(15) к (13) ошибся малость
17 SleepyHead
 
11.10.23
15:40
(15) Ты вообще понял, о чем я ? Технически вопросов нет.

Вопрос есть к тому, что он считает достоверным, а что нет.
18 Fedor-1971
 
11.10.23
15:43
15+ там и примерчик есть, т.е. в каждой выборке данных - записи в произвольном порядке, в общей - в порядке добавления (для Объединить все) и не факт для Объединить, бо может что-то выбросить

Вот про дозаполнение полей и свёртку чёй-то загнул, старый стал, память подводит
19 АгентБезопасной Нацио
 
11.10.23
16:07
(15) Еще раз: где-нибудь указано явно, что в результате запроса будет сначала кластер данных из первого запроса, потом второй кластер (с которым ОБЪЕДИНИТЬ первый), и потом следующий..?
20 Fedor-1971
 
11.10.23
17:28
(19) Складываем 1 + 1:
1. SQL не гарантирует порядка следования данных в выборке
2. ОБЪЕДИНИТЬ ВСЕ ни как не обрабатывает результаты итоговой выборки

Итого: данные будут помещены в итоговую выборку кластерами из локальных выборок
21 lodger
 
11.10.23
17:39
(20) почему никак?
упорядочивание и итоги делаются над получившейся после объединения таблицей.
22 Fedor-1971
 
11.10.23
17:43
20+ т.е. SQL последовательно исполняет запросы (с произвольным следованием строк) и по порядку их складывает в результат
На сколько я понимаю, оптимизатор SQL, в данном случае, не отрабатывает
Также возможен вариант следования кластеров в порядке получения для них данных (например, 3,1,2), но целиком по кластеру. Это уже от самого SQL  будет зависеть
23 Fedor-1971
 
11.10.23
17:44
(21) При явном указании оных, при простой выборке, по идее, кластеры записей будут следовать в неком порядке
24 lubitelxml
 
11.10.23
18:01
(0) не так давно тоже встретил - только у меня было несколько левых соединений (без описания полей таблиц и сортировок) по разным подразделениям - съезжает сортировка, причем пропорционально кол-ву соединений.
25 АгентБезопасной Нацио
 
11.10.23
18:29
(23) а я прошу не "по идее", а "по документации".
26 Chai Nic
 
11.10.23
20:00
(22) "т.е. SQL последовательно исполняет запросы "
А подзапросы с объединением? Порядок их выполнения не определен. Нигде не сказано, что первый подзапрос выполняется раньше второго. Они вообще могут параллельно исполниться, и какой станет первым - зависит от объема данных.
27 Fedor-1971
 
12.10.23
09:16
(26) в общем случае (в стандарте SQL) да, порядок выполнения подзапросов не гарантируется. В конкретных реализациях СУБД может гарантированно исполняться последовательно
В случае 1С, возможно, есть управление последовательностью, но сие тайна покрытая мраком.
28 АгентБезопасной Нацио
 
12.10.23
09:28
(27) "может гарантированно исполняться последовательно" - чем гарантированнно? Откуда вы это взяли?
29 Fedor-1971
 
12.10.23
09:50
(28) Вот от сюда: "В конкретных реализациях СУБД " - на файловых версиях DBASE-подобных СУБД вообще все запросы выполнялись строго в последовательности заданной в тексте (иногда прирост скорости выполнения запроса зависел от мелких особенностей конкретной БД)
С появлением серверов и оптимизатора выполнения запросов порядок стал неопределённым. На что, по первости, наступали разработчики баз данных (на сколько помню, на первых серверах была возможность отключить оптимизатор для сохранения работоспособности существующего ПО)
30 АгентБезопасной Нацио
 
12.10.23
10:59
(29)
1."С появлением серверов и оптимизатора выполнения запросов порядок стал неопределённым" - о чем и было сказано с самого начала.
  
2.у нас уже давно не dbase-подобные - не 1SQLite, не btrive, и иже.
Поэтому ваше утверждение, что "порядок гарантирован" и чреват костылями типа "возможность отключить оптимизатор для сохранения работоспособности". Именно поэтому вам стоит принять за гарантию "порядок выполнения подзапросов не гарантируется", и перестать парить людям мозг.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой