|   |   | 
| 
 | ОБЪЕДИНИТЬ - выборка всегда упорядочена по порядку таблиц? | ☑ | ||
|---|---|---|---|---|
| 0
    
        RomaH naïve 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 naïve 11.10.23✎ 15:00 | 
        типа свернуть?     | |||
| 6
    
        RomaH naïve 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, и иже. Поэтому ваше утверждение, что "порядок гарантирован" и чреват костылями типа "возможность отключить оптимизатор для сохранения работоспособности". Именно поэтому вам стоит принять за гарантию "порядок выполнения подзапросов не гарантируется", и перестать парить людям мозг. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |