|
конструктор запросов модифицирует мой запрос | ☑ | ||
---|---|---|---|---|
0
Адимр
06.02.14
✎
21:50
|
Кто нибудь сталкивался?
Правое соединение перекидывает на левое а из двух правых вообще все ломает и делает одно левое. |
|||
1
Torquader
06.02.14
✎
21:51
|
Покажи запрос.
|
|||
2
Адимр
06.02.14
✎
21:53
|
ВЫБРАТЬ
Очередь.Ссылка КАК ОчередьФайловНаПодписаниеСсылка, Очередь.Файл КАК ФайлСсылка, Очередь.ХэшСертификата КАК Хэш ИЗ Справочник.ОчередьФайловНаПодписание КАК Очередь ПРАВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеСостоянияДокументов КАК СостояниеЗарегистрирован ПО (Очередь.Файл.ВладелецФайла = СостояниеЗарегистрирован.Документ) И (СостояниеЗарегистрирован.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Зарегистрирован)) И (ДОБАВИТЬКДАТЕ(СостояниеЗарегистрирован.ДатаУстановки, СЕКУНДА, 300) < &ТекущаяДата) ПРАВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеСостоянияДокументов КАК СостояниеУтвержден ПО (Очередь.Файл.ВладелецФайла = СостояниеУтвержден.Документ) И (СостояниеУтвержден.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Утвержден)) И (ДОБАВИТЬКДАТЕ(СостояниеУтвержден.ДатаУстановки, СЕКУНДА, 300) < &ТекущаяДата) ГДЕ Очередь.ДатаВыгрузки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) И НЕ Очередь.Файл.ПометкаУдаления И НЕ Очередь.ПометкаУдаления УПОРЯДОЧИТЬ ПО Очередь.ДатаСоздания |
|||
3
Адимр
06.02.14
✎
21:55
|
и брюки превращаются в элегантные шорты (с)
ВЫБРАТЬ Очередь.Ссылка КАК ОчередьФайловНаПодписаниеСсылка, Очередь.Файл КАК ФайлСсылка, Очередь.ХэшСертификата КАК Хэш ИЗ РегистрСведений.ТекущиеСостоянияДокументов КАК СостояниеЗарегистрирован ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОчередьФайловНаПодписание КАК Очередь ПО Очередь.Файл.ВладелецФайла = СостояниеЗарегистрирован.Документ И (СостояниеЗарегистрирован.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Зарегистрирован)) И (ДОБАВИТЬКДАТЕ(СостояниеЗарегистрирован.ДатаУстановки, СЕКУНДА, 300) < &ТекущаяДата), РегистрСведений.ТекущиеСостоянияДокументов КАК СостояниеУтвержден ГДЕ Очередь.ДатаВыгрузки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) И НЕ Очередь.Файл.ПометкаУдаления И НЕ Очередь.ПометкаУдаления УПОРЯДОЧИТЬ ПО Очередь.ДатаСоздания |
|||
4
Ярус
06.02.14
✎
21:55
|
(2) а чем правое от левого отличается?
|
|||
5
Ranger_83
06.02.14
✎
21:59
|
(0)Если нет в разнице результата запроса,то в чем дело?
Коммерческий код пишешь-результат от кол-ва строк кода? |
|||
6
Адимр
06.02.14
✎
22:01
|
разница есть
|
|||
7
Ярус
06.02.14
✎
22:01
|
ппц у тебя запрос в (2) , там надо заменить
И (СостояниеЗарегистрирован.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Зарегистрирован)) на И (СостояниеЗарегистрирован.Состояние В (ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Зарегистрирован),ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Утвержден)) ну и одно левое это будет правильно |
|||
8
Адимр
06.02.14
✎
22:03
|
(7) Думаешь прокатит? Чо то я очкую Славик (с)
|
|||
9
Ярус
06.02.14
✎
22:04
|
ВЫБРАТЬ
Очередь.Ссылка КАК ОчередьФайловНаПодписаниеСсылка, Очередь.Файл КАК ФайлСсылка, Очередь.ХэшСертификата КАК Хэш ИЗ Справочник.ОчередьФайловНаПодписание КАК Очередь ПРАВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеСостоянияДокументов КАК СостояниеЗарегистрирован ПО (Очередь.Файл.ВладелецФайла = СостояниеЗарегистрирован.Документ) И (СостояниеЗарегистрирован.Состояние В (ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Зарегистрирован),ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Утвержден)) И (ДОБАВИТЬКДАТЕ(СостояниеЗарегистрирован.ДатаУстановки, СЕКУНДА, 300) < &ТекущаяДата) вот так в примерно,правое на левое он тут сам заменит |
|||
10
Ярус
06.02.14
✎
22:05
|
хотя я пьян и все накуй могу перепутать
|
|||
11
Ярус
06.02.14
✎
22:06
|
состояние вообще для наглядности бы вынес из соединения в
ГДЕ |
|||
12
Адимр
06.02.14
✎
22:07
|
и в результате запрос возвращает лажу отличную от того что в (2)
|
|||
13
Ярус
06.02.14
✎
22:09
|
хотя с ГДЕ я погорячился
|
|||
14
Ярус
06.02.14
✎
22:10
|
у тебя клиент сервер? если да то глянь в скуле во что он твой запрос из (2) в итоге превращает
|
|||
15
Адимр
06.02.14
✎
22:12
|
объясню суть
Есть элемент справочника Есть регистр состояний у элемента например могут быть два состояния это две записи в регистре (записей может и не быть) Нужно отобрать такие элементы справочника у которых в регистре есть 2 определенных состояний и установлены они были некотрое время назад. Запрос в (2) делает то что нужно, но почему конструктор курочит запрос не пойму. Это бага или фича? )) |
|||
16
GROOVY
06.02.14
✎
22:12
|
Запросы надо нормально писать.
|
|||
17
Адимр
06.02.14
✎
22:14
|
(14) возвращает две записи
34 Наимен1 000 35 наимен2 001 |
|||
18
jsmith82
06.02.14
✎
22:16
|
ВЫБРАТЬ
ТекущиеСостоянияДокументов.Документ ПОМЕСТИТЬ ТекущиеСостоянияДокументов ИЗ РегистрСведений.ТекущиеСостоянияДокументов КАК ТекущиеСостоянияДокументов ГДЕ ТекущиеСостоянияДокументов.Состояние В ((ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Зарегистрирован),ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Утвержден)) И (ДОБАВИТЬКДАТЕ(ТекущиеСостоянияДокументов.ДатаУстановки, СЕКУНДА, 300) < &ТекущаяДата); /////////////////////////////////////// ВЫБРАТЬ Очередь.Ссылка КАК ОчередьФайловНаПодписаниеСсылка, Очередь.Файл КАК ФайлСсылка, Очередь.ХэшСертификата КАК Хэш ИЗ ТекущиеСостоянияДокументов ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОчередьФайловНаПодписание КАК Очередь ПО Очередь.Файл.ВладелецФайла = ТекущиеСостоянияДокументов.Документ |
|||
19
Адимр
06.02.14
✎
22:17
|
(16) То есть ты считаешь если я написал запрос а конструктор его переколбасил так что получившийся после него запрос возвращает совсем другие данные - это нормально? Типа оптимизировал?
|
|||
20
jsmith82
06.02.14
✎
22:19
|
(19) конструктор всегда правое на левое кидает
|
|||
21
jsmith82
06.02.14
✎
22:19
|
и, может быть, он просто офигел от твоего запроса
|
|||
22
Torquader
06.02.14
✎
22:21
|
А ПРАВОЕ Б = Б ЛЕВОЕ А.
Просто, Очередь.Файл.ВладелецФайла=СостояниеЗарегистрирован.Документ это соединение через получение дочернего объекта, Файл-то у тебя справочник. Так что неявно используется ещё одна таблица. |
|||
23
Torquader
06.02.14
✎
22:22
|
И потом, зачем два соединения, когда они по сути тоже самое.
|
|||
24
Адимр
06.02.14
✎
22:25
|
(22) Ты прав насчет владельца, учту.
|
|||
25
GROOVY
06.02.14
✎
22:25
|
(19) Без обид, просто мои запросы конструктор никогда не превращает в неожиданный вариант.
|
|||
26
User_Agronom
06.02.14
✎
22:26
|
Это всегда так было. Ничего удивительного.
|
|||
27
jsmith82
06.02.14
✎
22:27
|
(25) +1
первый раз слышу, что КЗ модифицирует текст запроса судя по запросу, не удивительно |
|||
28
jsmith82
06.02.14
✎
22:29
|
простые правила
1. никогда не использовать правое соединение 2. никогда не использовать несколько соединений, если есть а)возможность объединения через условие б)использование группового условия 3. стараться не использовать точку профит |
|||
29
jsmith82
06.02.14
✎
22:30
|
пиши запрос так, будто пишешь его для профайлера
один фиг ему потом чёрную работу делать |
|||
30
Ярус
06.02.14
✎
22:30
|
(29) вот теперь будешь объяснять человеку что такое профайлер
|
|||
31
GROOVY
06.02.14
✎
22:40
|
(30) Отличная штука,чтобы думать при написании запросов :)
|
|||
32
Адимр
06.02.14
✎
22:41
|
Никто мастер класс не покажет, как должен выглядеть расово правильный запрос, что бы не медленнее чем запрос в (2) и конструктор что бы не глючил?
|
|||
33
jsmith82
06.02.14
✎
22:41
|
(32) все вопросы к GROOVY
|
|||
34
jsmith82
06.02.14
✎
22:42
|
или просто прочитать книгу по T-SQL
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |