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