|
Выбрать первые 1 выдает не первую запись | ☑ | ||
---|---|---|---|---|
0
OnCheck
19.06.12
✎
13:07
|
Здравствуйте.
Текст запроса ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 ПодразделенияОрганизаций.Ссылка, ПодразделенияОрганизаций.Владелец.Наименование КАК НазваниеОрганизации ИЗ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций ГДЕ ПодразделенияОрганизаций.Владелец = &Организация УПОРЯДОЧИТЬ ПО ПодразделенияОрганизаций.Наименование ИЕРАРХИЯ выдает не ту запись, которая стоит первой в результате запроса ВЫБРАТЬ РАЗРЕШЕННЫЕ ПодразделенияОрганизаций.Ссылка, ПодразделенияОрганизаций.Владелец.Наименование КАК НазваниеОрганизации ИЗ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций ГДЕ ПодразделенияОрганизаций.Владелец = &Организация УПОРЯДОЧИТЬ ПО ПодразделенияОрганизаций.Наименование ИЕРАРХИЯ При чем одну и ту же. Не могу понять, с чем связано. Помогите советом. Спасибо. |
|||
1
mikecool
19.06.12
✎
13:07
|
субд?
|
|||
2
mikecool
19.06.12
✎
13:08
|
и вообще - а должен?
|
|||
3
OnCheck
19.06.12
✎
13:08
|
(1) SQL
|
|||
4
OnCheck
19.06.12
✎
13:09
|
(2) а почему нет?
|
|||
5
Прохожий
19.06.12
✎
13:09
|
Может иерархический справочник?
|
|||
6
OnCheck
19.06.12
✎
13:10
|
(5) ну да, иначе смысл упорядочивать по иерархии?
|
|||
7
Андрюха
19.06.12
✎
13:10
|
Попробуй сначала без ПЕРВЫЕ 1, выдаст что-нибудь вообще?
|
|||
8
azernot
19.06.12
✎
13:11
|
Дай угадаю, в результате запроса первый стоит родитель того самого элемента котрый выдаётся как первый?
|
|||
9
OnCheck
19.06.12
✎
13:11
|
(7) так в том то и дело что разные результаты выдает с первый и без первые!
|
|||
10
Прохожий
19.06.12
✎
13:11
|
Справочник упорядочивается по наименованию по всем записям, а иерархическая выборка первого может ограничиваться принадлежностью к группе в первой записи таблицы, наверно...
|
|||
11
Ненавижу 1С
гуру
19.06.12
✎
13:12
|
потому что ПЕРВЫЕ 1 выполняет СУБД и находит оное
а УПОРЯДОЧИТЬ ПО ... ИЕРАРХИЯ делается уже позже и причем на сервере приложений |
|||
12
OnCheck
19.06.12
✎
13:12
|
(8) нет, фактически уровень 1
|
|||
13
Ненавижу 1С
гуру
19.06.12
✎
13:12
|
(8) не угадал ))
|
|||
14
OnCheck
19.06.12
✎
13:13
|
(11) это типовой код в ЗУП, блин... как править?
|
|||
15
Прохожий
19.06.12
✎
13:13
|
Группа1
---Подргуппа1 -------"Булка" "Арбуз" Может выходит так: Результат 1 - "Булка" Результат 2 - "Арбуз" |
|||
16
acsent
19.06.12
✎
13:13
|
а как можно по наименованию по иерархии упорядочить?
|
|||
17
Прохожий
19.06.12
✎
13:13
|
?
|
|||
18
OnCheck
19.06.12
✎
13:13
|
как отправить конкретный элемент в топ этой выборки?
|
|||
19
OnCheck
19.06.12
✎
13:14
|
(13) как отправить конкретный элемент в топ этой выборки?
|
|||
20
palpetrovich
19.06.12
✎
13:16
|
а так что дает?
ВЫБРАТЬ ПЕРВЫЕ 1 |
|||
21
azernot
19.06.12
✎
13:18
|
(19) Убрать к чёрту слово ИЕРАРХИЯ
|
|||
22
OnCheck
19.06.12
✎
13:21
|
(20) не то что дает в первой строчке без "первые 1"
(21) не хотелось бы, типовой код, там суть в том что поставщиком табличного поля является справочникСписок подразделения организаций. И при проходе по этому списку первым идет именно тот элемент который возвращает запрос без "первые 1". |
|||
23
OnCheck
19.06.12
✎
13:22
|
+(22) именно так они идентифицирую первый элемент выборки и для него заводят корневой элемент - организация
|
|||
24
OnCheck
19.06.12
✎
13:24
|
(13) полагаю, что в запросе select top 1 на СУБД упорядочивается по ГУИД?
|
|||
25
exchang
19.06.12
✎
13:29
|
может сперва отсортировать и потом выбрать 1?
|
|||
26
Jaap Vduul
19.06.12
✎
13:30
|
ВЫБРАТЬ Ссылка, НазваниеОрганизации ИЗ
(ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 ПодразделенияОрганизаций.Ссылка, ПодразделенияОрганизаций.Владелец.Наименование КАК НазваниеОрганизации ИЗ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций ГДЕ ПодразделенияОрганизаций.Владелец = &Организация УПОРЯДОЧИТЬ ПО ПодразделенияОрганизаций.Наименование) УПОРЯДОЧИТЬ ПО Ссылка ИЕРАРХИЯ |
|||
27
mikecool
19.06.12
✎
13:31
|
а так будет правильно?
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 ПодразделенияОрганизаций.Ссылка, ПодразделенияОрганизаций.Владелец.Наименование КАК НазваниеОрганизации (ВЫБРАТЬ ПодразделенияОрганизаций.Ссылка, ПодразделенияОрганизаций.Владелец.Наименование КАК НазваниеОрганизации ИЗ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций ГДЕ ПодразделенияОрганизаций.Владелец = &Организация) Как ПодразделенияОрганизаций УПОРЯДОЧИТЬ ПО ПодразделенияОрганизаций.Наименование ИЕРАРХИЯ |
|||
28
andrewks
19.06.12
✎
13:31
|
выбрать первые 1 из
(выбрать бла-бла-бла упорядочить...) |
|||
29
mikecool
19.06.12
✎
13:31
|
вернее так
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 ПодразделенияОрганизаций.Ссылка, ПодразделенияОрганизаций.Владелец.Наименование КАК НазваниеОрганизации (ВЫБРАТЬ ПодразделенияОрганизаций.Ссылка, ПодразделенияОрганизаций.Владелец.Наименование КАК НазваниеОрганизации ИЗ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций ГДЕ ПодразделенияОрганизаций.Владелец = &Организация УПОРЯДОЧИТЬ ПО ПодразделенияОрганизаций.Наименование ИЕРАРХИЯ) Как ПодразделенияОрганизаций |
|||
30
andrewks
19.06.12
✎
13:31
|
(26) зачем второе упорядочивание?
|
|||
31
Jaap Vduul
19.06.12
✎
13:40
|
(30) Для иерархии
|
|||
32
OnCheck
19.06.12
✎
13:43
|
да это все понятно, хотел поправить не переписывая запрос. Думаю про проверить вариант с упорядочиванием по ГУИД.
|
|||
33
thargon
19.06.12
✎
13:44
|
(24) "полагаю, что в запросе select top 1 на СУБД упорядочивается по ГУИД?" - нет, если порядок явно не указан - то порядок вывода не определен и может быть любым на усмотрение оптимизатора...
|
|||
34
OnCheck
19.06.12
✎
13:45
|
(33) Возможно, но возвращает один и тот же элемент справочника
|
|||
35
andrewks
19.06.12
✎
13:46
|
(32) да поймы ты, СУБД тебе не обязана вернуть 1-ю запись с учётом упорядочивания, оно уже потом выполняется. поэтому надо явно об этом попросить
|
|||
36
andrewks
19.06.12
✎
13:47
|
+(35) более того, в разных СУБД можно получить разные записи. и даже в одной СУБД теоретически можно получить разные записи
|
|||
37
OnCheck
19.06.12
✎
13:51
|
(36) но 1с ники же сделали так и работало, пока не поломал :-)!
|
|||
38
thargon
19.06.12
✎
13:52
|
(34) а порядок согласно стандарту все равно не определен :) В реальных случаях он будет в основном один и тот же, но случай когда оптимизатор решит, что теперь записи удобнее выгребать в другом порядке - возможен. Это может произойти из-за того, что статистика обновилась, индексы пересчитались, селективность индексов изменилась, апдейт на sql очередной поставили, вообще сервер sql поменяли на более другой...
|
|||
39
andrewks
19.06.12
✎
13:56
|
т.е.
1. выбрать первую запись, удовлетворяющую заданным условиям 2. группируем 3. упорядочиваем вот здесь много букв: http://www.gilev.ru/1c/81/index/optimquery.htm |
|||
40
Jaap Vduul
19.06.12
✎
14:20
|
Вообще, если в упорядочивании указано ИЕРАРХИЯ, то сортировка на уровне СУБД выполняется сначала по ID родителя, затем по ID элемента, вне зависимости от того какое поле указано для сортировки в самом запросе.
|
|||
41
OnCheck
20.06.12
✎
07:23
|
вот такой запрос я вижу на скуле.
exec sp_executesql N'SELECT TOP 1 T1._IDRRef, T2._Description, T1._ParentIDRRef, T1._Description FROM _Reference94 T1 WITH(NOLOCK) LEFT OUTER JOIN _Reference80 T2 WITH(NOLOCK) ON T1._OwnerIDRRef = T2._IDRRef WHERE (T1._OwnerIDRRef = P1) ORDER BY (T1._ParentIDRRef), (T1._IDRRef)',N'P1 varbinary(16)',0x00000000000000000000000000000000 ORDER BY тут есть, упорядочивает он по ParentIDRRef, IDRRef. теперь задача как правильно поправить ID-шники |
|||
42
OnCheck
20.06.12
✎
07:26
|
Уникальный идентификатор и есть IDRef?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |