|     0
            - 15.08.2012 - 09:18
           |      
                    ВЫБРАТЬ Абоненты.Ссылка КАК Абонент ИЗ Справочник.Абоненты КАК Абоненты ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Договоры КАК Договоры ПО Абоненты.Ссылка = Договоры.Владелец (Договоры.УслугаНаселению В ИЕРАРХИИ(&ВДГО)) И( Договоры.ДатаОкончания > &ТекущаяДата ИЛИ Договоры.ДатаОкончания = Датавремя(1,1,1)) ГДЕ Договоры.Ссылка есть NULL выходит ошибка, как будет правильно? Текст запроса: Строка 7: **(7,2)**: Синтаксическая ошибка "(Договоры.УслугаНаселению" <<?>>(Договоры.УслугаНаселению В ИЕРАРХИИ(&ВДГО))  |    |  
|     1
            - 15.08.2012 - 09:36
           |     
			
			
                Абоненты.Ссылка=Договоры.Владелец(Договоры.УслугаН  аселению В ИЕРАРХИИ(&ВДГО)) Ничего не напрягает?  |    |  
|     2
            - 15.08.2012 - 09:46
           |  (1) после Владельца нужно И |   |  
|     3
            - 15.08.2012 - 13:21
           |     
			
			
                одного меня напрягает это? :) ГДЕ Договоры.Ссылка есть NULL  |    |  
|     4
            - 15.08.2012 - 13:27
           |  3-p etrovich > а что именно напрягает? |   |  
|     5
            - 15.08.2012 - 15:18
           |     
			
			
                ПО Абоненты.Ссылка = Договоры.Владелец  И ГДЕ Договоры.Ссылка есть NULL Не будет работать, потому что ссылку имеют все записанные элементы справочников  |    |  
|     6
            - 15.08.2012 - 15:33
           |  5-hiallbb > да ну? А ничего, что ГДЕ накладывается на результат соединения? |   |  
|     7
            - 15.08.2012 - 15:44
           |     
			
			
                вообще бред! я бы сделал : ВЫБРАТЬ Договоры.Владелец КАК Абонент, Договоры.Ссылка КАК Договор, Договоры.ДатаОкончания ИЗ Справочник.Договоры как Договоры ГДЕ (Договоры.УслугаНаселению В ИЕРАРХИИ(&ВДГО)) И (Договоры.ДатаОкончания > &ТекущаяДата ИЛИ Договоры.ДатаОкончания = Датавремя(1,1,1))  |    |  
|     8
            - 15.08.2012 - 15:46
           |  7-Maximus23region > и получил бы строго обратный результат? |   |  
|     9
            - 15.08.2012 - 15:53
           |  Сорри, не увидел левого соединения |   |  
|     10
            - 16.08.2012 - 10:37
           |  надо спросить у автора - что надо получить |   |  
|     11
            - 16.08.2012 - 10:53
           |  Все написано очень правильно и грамотно. Не хватает только "И" перед скобками, на которые ругается |   |  
|     12
            - 16.08.2012 - 14:31
           |  в чем грамота ? если ссылка нул - то соеднять по датам ? датам чего - несуществующего ? |   |  
|     13
            - 16.08.2012 - 15:06
           |     
			
			
                проще через вложенный запрос сделать, имхо. автор, подскажите, пожалуйста, что нужно получить в результате?  |    |  
|     14
            - 16.08.2012 - 15:15
           |     
			
			
                12-Maximus23region > и ты читай (6) 13-evg77 > а зачем вложенный? Потом сделать Не В (РезультатВложенногоЗапроса)? Очень будешь радоваться такой конструкции на наборах данных более-менее приличного оьбъёма  |    |  
|     15
            - 16.08.2012 - 15:45
           |  (14) соедини по датам - явно дата есть у существующей записи БД, какой смысл там где искать пустоту ??? |   |  
|     16
            - 16.08.2012 - 15:49
           |     
			
			
                15-Maximus23region > А если подходящей записи для соединения нет?  Задача автора (судя по запросу) прозрачна: получить абонентов, с которыми НЕ заключено договоров, удовлетворяющих некоторым условиям.  |    |  
|     17
            - 16.08.2012 - 15:52
           |  ага, и отфильтровать в диапазоне дат то чего нет |   |  
|     18
            - 16.08.2012 - 16:17
           |     
			
			
                17-Maximus23region > пипец что в голове у ... !©  :) Ещё раз скажу: см(6) Сначала цепляем договора слева ко всем абонентам по набору условий. Если ни одного договора не прицепилось, то в результате будет строка - Контрагент|NULL. Именно такие контрагенты и нужны автору: отсюда ГДЕ  |    |  
|     19
            - 16.08.2012 - 16:57
           |  ищем в черной комнате черную кошку по датам ? при условии что ее нет ? |   |  
|     20
            - 16.08.2012 - 16:59
           |  запрос безусловно отработает, но логика что-то мне на нравится |   |  
|     21
            - 16.08.2012 - 17:02
           |     
			
			
                19-Maximus23region > Устанавливаем, что такой кошки нет. Выполни в типовой БП в языке запросов простую задачу: отбери всех контрагентов у которых нет договоров с определенной организацией. Авось, получится...  |    |  
|     22
            - 16.08.2012 - 17:54
           |  проще в коде потом чужом разбираться. но это сугубо имхо. |   |  
|     23
            - 16.08.2012 - 18:01
           |  Оптимизатор SQL транслирует эти конструкции в абсолютно одинаковые планы выполнения. В некоторых случаях конструкция "В..." будет понятнее, в данном случае отлично подходит ЛЕВОЕ СОЕДИНЕНИЕ |   |  
|     24
            - 16.08.2012 - 18:08
           |     
			
			
                (21) ну например вот так: ВЫБРАТЬ Контрагенты.Ссылка ПОМЕСТИТЬ мКонтрагенты ИЗ Справочник.Контрагенты КАК Контрагенты ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов ПО Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Контрагенты.Ссылка ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ НЕ Контрагенты.Ссылка В (ВЫБРАТЬ РАЗЛИЧНЫЕ мКонтрагенты.Ссылка ИЗ мКонтрагенты) И НЕ Контрагенты.ЭтоГруппа  |    |  
|     25
            - 16.08.2012 - 18:12
           |  (24) забыл про организацию. но не суть |   |  
|     26
            - 17.08.2012 - 08:57
           |     
			
			
                23-Lexusss > Возможно. Планы выполнения не смотрел.  В душу "запало" и закостенело давно. Возможно, причина не столько в языковой конструкции, сколько с необходимостью минимизации количества вложенных запросов. 22-evg77 > про читабельность согласен  |    |  
|     27
            - 17.08.2012 - 09:58
           |  (24) Засунь эту конструкцию себе куда нить.... на 2 пользователей. В нагруженной системе эта хрень будет работать чуть более, чем абсолютно отвратительно, по сравнению с конструкцией в (0). |   |  
|     28
            - 17.08.2012 - 10:34
           |  (27) с чего бы энто ? разница не в разы, а на проценты чуть проиграет |   |  
|     29
            - 17.08.2012 - 11:04
           |     
			
			
                Положим, у меня в базе 100 000 контрагентов, у каждого по 30-50 договоров. Из этого списока контрагентов подпадет под это условие пусть 30. Подумай теперь, сколько строк будет сгенерировано и обработано в твоей топологии запроса, а сколько - у автора. За одну генерации временной таблицы на тупое перемножении в абсолютном большинстве случаев должен ставиться НЕУД. Бывают, конечно, отдельные случаи работы оптимизатора... но принимать такие решения следует на конкретных данных и показателях статистики.  |    |  
|     30
            - 17.08.2012 - 12:17
           |  (29) запусти на реальной базе с секундомером и увидишь |   |  
 Интернет-форум Краснодарского края и Краснодара |