Имя: Пароль:
1C
1С v8
Левое соединение так должно делать?
0 mikecool
 
27.07.11
15:40
соединяю основную таблицу левым соединением с подзапросом, который ничего не возвращает, типа
выбрать ОснТабл.*, естьnull(ДопТабл.поле, "")
из ОснТабл
левое соединение (подзапрос) как ДопТабл
По ОснТабл.Поле2 = ДопТабл.Поле2
подзапрос ничего не возвращает, это нормально
тогда почему основной запрос возвращает ничего?
если меняю условие соединения на По ОснТабл.Поле2 = ДопТабл.Поле2 Или Истина
то получаю нужный мне результат, но без значения естьnull(ДопТабл.поле, ""), это тоже нормально
такое поведение левого соединения нормально?
1 mikecool
 
27.07.11
15:41
по моим понятиям в результате должны быть записи из ОснТабл, и по наличию - значения из ДопТабл
или я гоню?
2 Fragster
 
гуру
27.07.11
15:43
Работает:



ВЫБРАТЬ
   "АА" КАК Поле1
ПОМЕСТИТЬ Т1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   "АА" КАК Поле1,
   "ББ" КАК Поле2
ПОМЕСТИТЬ Т2
ГДЕ ЛОЖЬ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Т1.Поле1,
   Т2.Поле2
ИЗ
   Т1 КАК Т1
       ЛЕВОЕ СОЕДИНЕНИЕ Т2 КАК Т2
       ПО Т1.Поле1 = Т2.Поле1
3 Fragster
 
гуру
27.07.11
15:43
в том смысле, что результат НЕ пустой
4 mikecool
 
27.07.11
15:44
(2) а в Т2 - пусто? нет ни одной записи?
5 Fragster
 
гуру
27.07.11
15:44
(4) да
6 Fragster
 
гуру
27.07.11
15:46
выполни в консоли, потом закоменть "где ложь", и еще раз выполни
7 Axel2009
 
27.07.11
15:46
(0) не нормально, гдето косяк =)
8 Ёпрст
 
гуру
27.07.11
15:46
(4) да.
9 mikecool
 
27.07.11
15:48
не работает у мну здесь
...
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ПО (ОтветственныеЛица.СтруктурнаяЕдиница = РеализацияТоваровУслуг.Склад)
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
КонтактныеЛицаКонтрагентов.Наименование + ЕСТЬNULL("", тел: "" + (ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(17))), """") КАК КЛПлюсТелефон,
   &ТекущийДокумент КАК СсылкаНаДокумент
   ИЗ
   (ВЫБРАТЬ ПЕРВЫЕ 1
   КонтактныеЛицаКонтрагентов.КонтактноеЛицо.Наименование КАК Наименование,
   КонтактныеЛицаКонтрагентов.Ссылка КАК Ссылка,
   КонтактныеЛицаКонтрагентов.КонтактноеЛицо КАК КонтактноеЛицо
   ИЗ
   Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов
   ГДЕ
   КонтактныеЛицаКонтрагентов.Владелец В
   (ВЫБРАТЬ
       ВЫБОР
       КОГДА РеализацияТоваровУслуг.Грузополучатель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
       ТОГДА РеализацияТоваровУслуг.Контрагент
       ИНАЧЕ РеализацияТоваровУслуг.Грузополучатель
       КОНЕЦ КАК Поле1
   ИЗ
   Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
   ГДЕ
   РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент)
   И КонтактныеЛицаКонтрагентов.РольКонтактногоЛица.Наименование = ""Ответственный за клиента"") КАК КонтактныеЛицаКонтрагентов
   ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
   ПО КонтактныеЛицаКонтрагентов.КонтактноеЛицо = КонтактнаяИнформация.Объект
   И (КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон))
   И (КонтактнаяИнформация.Вид.Код = ""000000028"")) КАК ВложенныйЗапрос
   ПО (ВложенныйЗапрос.СсылкаНаДокумент = РеализацияТоваровУслуг.Ссылка)

вот тут при привязке к РТиУ подзапрос ничего не возвращает, получаю швах
на Код = ""000000028"" не обращайте внимание, так получилось
как только добавляю контакт в виде телепона, все нормально выбирается
10 Axel2009
 
27.07.11
15:48
(0) прям как в примере..
ВЫБРАТЬ
   "АА" КАК Поле1
ПОМЕСТИТЬ Т1
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
   "АА" КАК Поле1,
   "ББ" КАК Поле2
ПОМЕСТИТЬ Т2
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
   ОснТабл.Поле1,
   ЕСТЬNULL(ДопТабл.Поле2, "") КАК Ага
ИЗ
   Т1 КАК ОснТабл
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Поле1, Поле2 ИЗ Т2 ГДЕ ЛОЖЬ) КАК ДопТабл
       ПО ОснТабл.Поле1 = ДопТабл.Поле1
11 mikecool
 
27.07.11
15:48
ПО (ОтветственныеЛица.СтруктурнаяЕдиница = РеализацияТоваровУслуг.Склад) - это лишнее
12 mikecool
 
27.07.11
15:49
форматирование овно получилось )
13 mikecool
 
27.07.11
15:51
в случае 2 и 10 - возвращается 0 записей(или ошибаюсь?)
у меня - нулл
14 Fragster
 
гуру
27.07.11
15:51
(13) у всех 1 запись, а у тебя - 0? не верю
15 mikecool
 
27.07.11
15:52
(14) честно - сам сижу офигеваю, глазам не верб уже )
16 Axel2009
 
27.07.11
15:52
(15) чудес не бывает. давай весь запрос без урезок
17 mikecool
 
27.07.11
15:53
(16) заси.ать не хочется
18 Ник второй
 
27.07.11
15:53
(16) +1

Видимо где то "Где" спраяталось
19 Axel2009
 
27.07.11
15:54
(13) что за сервер?
20 mikecool
 
27.07.11
15:55
(19) постгрес
21 Shurjk
 
27.07.11
15:57
интересно как же вы более сложные запросы пищите если не представляете что должен небольшой возвращать.
22 Axel2009
 
27.07.11
15:58
а это что вернет?
ВЫБРАТЬ
   "АА" КАК Поле1
ПОМЕСТИТЬ Т1
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
   "ББ" КАК Поле1,
   "ББ" КАК Поле2
ПОМЕСТИТЬ Т2
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
   ОснТабл.Поле1,
   ЕСТЬNULL(ДопТабл.Поле2, "") КАК Ага
ИЗ
   Т1 КАК ОснТабл
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Поле1, Поле2 ИЗ Т2 ГДЕ ЛОЖЬ) КАК ДопТабл
       ПО ОснТабл.Поле1 = ДопТабл.Поле1
23 Axel2009
 
27.07.11
15:58
(22)+ ГДЕ ЛОЖЬ убрать
24 mikecool
 
27.07.11
15:59
(21) нормально пишу, иногда без конструктора, привык уже
нашел закавыку, в конце запроса после всех соединений шло
ГДЕ
   РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент

убираю это ГДЕ в подзапрос
(выбрать * Из
   Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ГДЕ
   РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент ) КАК РеализацияТоваровУслуг
и все начинает работать как мне надо
правильный ответ был - "ищи ГДЕ" )))
25 mikecool
 
27.07.11
16:00
осталось только * заменить на список нужных полей и продолжать пить чай ))
всем спасибо
26 Axel2009
 
27.07.11
16:01
(25)
ВЫБРАТЬ *
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
КонтактныеЛицаКонтрагентов.Наименование + ЕСТЬNULL(", тел: " + (ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(17))), "") КАК КЛПлюсТелефон,
   &ТекущийДокумент КАК СсылкаНаДокумент
   ИЗ

  (ВЫБРАТЬ ПЕРВЫЕ 1
  КонтактныеЛицаКонтрагентов.КонтактноеЛицо.Наименование КАК Наименование,
  КонтактныеЛицаКонтрагентов.Ссылка КАК Ссылка,

   КонтактныеЛицаКонтрагентов.КонтактноеЛицо КАК КонтактноеЛицо
   ИЗ
   Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов
   ГДЕ
   КонтактныеЛицаКонтрагентов.Владелец В
   (ВЫБРАТЬ
       ВЫБОР
       КОГДА РеализацияТоваровУслуг.Грузополучатель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
       ТОГДА РеализацияТоваровУслуг.Контрагент
       ИНАЧЕ РеализацияТоваровУслуг.Грузополучатель
       КОНЕЦ КАК Поле1
   ИЗ
   Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
   ГДЕ
   РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент)
   И КонтактныеЛицаКонтрагентов.РольКонтактногоЛица.Наименование = "Ответственный за клиента") КАК КонтактныеЛицаКонтрагентов
   ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
   ПО КонтактныеЛицаКонтрагентов.КонтактноеЛицо = КонтактнаяИнформация.Объект
   И (КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон))
   И (КонтактнаяИнформация.Вид.Код = "000000028")) КАК ВложенныйЗапрос
   ПО (ВложенныйЗапрос.СсылкаНаДокумент = РеализацияТоваровУслуг.Ссылка)

ГДЕ РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент

у меня возвращает одну строку и 2 последние колонки пустые.
27 Shurjk
 
27.07.11
16:01
(24) Думаю если бы нормально писали то искали бы ошибку а не устраивали бы дисскусию на тему бывают ли чудеса или нет.
28 mikecool
 
27.07.11
16:02
(27) Александр, вы тролль?
(26) а у тебя кто в роли серва БД?
29 Axel2009
 
27.07.11
16:05
(28) скуль. запрос явно не полный что в (9) урезан для примера. а там на 99.9999% ответ на вопрос почему не так.
30 Ник второй
 
27.07.11
16:06
Проблема в том что Где превращает Левое соединение во Внутреннее.
31 mikecool
 
27.07.11
16:10
(30) но ГДЕ к соединению не должно быть никаким боком (
32 mikecool
 
27.07.11
16:11
ы, заменяю * на список полей - снова пусто, возвращаю звезду - есть запись ))
играюсь
33 Axel2009
 
27.07.11
16:12
(30) если в ГДЕ поля из "правой таблицы" в левом соединении. если из "левой таблицы" тогда ниче не превращает.
34 mikecool
 
27.07.11
16:37
почему запрос
выбрать *
из    
   
   (ВЫБРАТЬ *
       //РеализацияТоваровУслуг.Ссылка КАК Ссылка,
       //РеализацияТоваровУслуг.Склад КАК Склад,
       //РеализацияТоваровУслуг.ДоговорКонтрагента КАК ДоговорКонтрагента,
       //РеализацияТоваровУслуг.Номер КАК Номер,
       //РеализацияТоваровУслуг.Дата КАК Дата,
       //РеализацияТоваровУслуг.Организация КАК Организация,
       //РеализацияТоваровУслуг.Грузополучатель КАК Грузополучатель,
       //РеализацияТоваровУслуг.Грузоотправитель КАК Грузоотправитель,
       //РеализацияТоваровУслуг.БанковскийСчетОрганизации КАК БанковскийСчетОрганизации,
       //РеализацияТоваровУслуг.Контрагент КАК Контрагент,
       //РеализацияТоваровУслуг.Подразделение КАК Подразделение,
       //РеализацияТоваровУслуг.ВалютаДокумента КАК ВалютаДокумента,
       //РеализацияТоваровУслуг.КурсВзаиморасчетов КАК КурсВзаиморасчетов,
       //РеализацияТоваровУслуг.КратностьВзаиморасчетов КАК КратностьВзаиморасчетов,
       //РеализацияТоваровУслуг.УчитыватьНДС КАК УчитыватьНДС,
       //РеализацияТоваровУслуг.СуммаВключаетНДС КАК СуммаВключаетНДС,
       //РеализацияТоваровУслуг.ОтпускРазрешил КАК ОтпускРазрешил,
       //РеализацияТоваровУслуг.ОтпускПроизвел КАК ОтпускПроизвел,
       //РеализацияТоваровУслуг.ДоверенностьНомер КАК ДоверенностьНомер,
       //РеализацияТоваровУслуг.ДоверенностьДата КАК ДоверенностьДата,
       //РеализацияТоваровУслуг.ДоверенностьВыдана КАК ДоверенностьВыдана,
       //РеализацияТоваровУслуг.ДатаПогрузки КАК ДатаПогрузки,
       //РеализацияТоваровУслуг._б_ИтогоКоличествоМест КАК _б_ИтогоКоличествоМест
   ИЗ
       Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
   ГДЕ
       РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент) КАК РеализацияТоваровУслуг
   левое соединение    
       (ВЫБРАТЬ
           КонтактныеЛицаКонтрагентов.Наименование + ЕСТЬNULL(", тел: " + (ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(17))), "") КАК КЛПлюсТелефон,
           &ТекущийДокумент Как СсылкаНаДокумент
                   ИЗ
           (ВЫБРАТЬ ПЕРВЫЕ 1
               КонтактныеЛицаКонтрагентов.КонтактноеЛицо.Наименование КАК Наименование,
               КонтактныеЛицаКонтрагентов.Ссылка КАК Ссылка,
               КонтактныеЛицаКонтрагентов.КонтактноеЛицо КАК КонтактноеЛицо
           ИЗ
               Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов
           ГДЕ
               КонтактныеЛицаКонтрагентов.Владелец В
                       (ВЫБРАТЬ
                           ВЫБОР
                               КОГДА РеализацияТоваровУслуг.Грузополучатель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                                   ТОГДА РеализацияТоваровУслуг.Контрагент
                               ИНАЧЕ РеализацияТоваровУслуг.Грузополучатель
                           КОНЕЦ КАК Поле1
                       ИЗ
                           Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                       ГДЕ
                           РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент)
               И КонтактныеЛицаКонтрагентов.РольКонтактногоЛица.Наименование = "Ответственный за клиента") КАК КонтактныеЛицаКонтрагентов
               ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
               ПО КонтактныеЛицаКонтрагентов.КонтактноеЛицо = КонтактнаяИнформация.Объект
                   И (КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон))
                   И (КонтактнаяИнформация.Вид.Код = "000000028")) КАК ВложенныйЗапрос
       ПО (ВложенныйЗапрос.СсылкаНаДокумент = РеализацияТоваровУслуг.Ссылка)

возвращает 1 запись, а

выбрать *
из    
   
   (ВЫБРАТЬ //*
       РеализацияТоваровУслуг.Ссылка КАК Ссылка,
       РеализацияТоваровУслуг.Склад КАК Склад,
       РеализацияТоваровУслуг.ДоговорКонтрагента КАК ДоговорКонтрагента,
       РеализацияТоваровУслуг.Номер КАК Номер,
       РеализацияТоваровУслуг.Дата КАК Дата,
       РеализацияТоваровУслуг.Организация КАК Организация,
       РеализацияТоваровУслуг.Грузополучатель КАК Грузополучатель,
       РеализацияТоваровУслуг.Грузоотправитель КАК Грузоотправитель,
       РеализацияТоваровУслуг.БанковскийСчетОрганизации КАК БанковскийСчетОрганизации,
       РеализацияТоваровУслуг.Контрагент КАК Контрагент,
       РеализацияТоваровУслуг.Подразделение КАК Подразделение,
       РеализацияТоваровУслуг.ВалютаДокумента КАК ВалютаДокумента,
       РеализацияТоваровУслуг.КурсВзаиморасчетов КАК КурсВзаиморасчетов,
       РеализацияТоваровУслуг.КратностьВзаиморасчетов КАК КратностьВзаиморасчетов,
       РеализацияТоваровУслуг.УчитыватьНДС КАК УчитыватьНДС,
       РеализацияТоваровУслуг.СуммаВключаетНДС КАК СуммаВключаетНДС,
       РеализацияТоваровУслуг.ОтпускРазрешил КАК ОтпускРазрешил,
       РеализацияТоваровУслуг.ОтпускПроизвел КАК ОтпускПроизвел,
       РеализацияТоваровУслуг.ДоверенностьНомер КАК ДоверенностьНомер,
       РеализацияТоваровУслуг.ДоверенностьДата КАК ДоверенностьДата,
       РеализацияТоваровУслуг.ДоверенностьВыдана КАК ДоверенностьВыдана,
       РеализацияТоваровУслуг.ДатаПогрузки КАК ДатаПогрузки,
       РеализацияТоваровУслуг._б_ИтогоКоличествоМест КАК _б_ИтогоКоличествоМест
   ИЗ
       Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
   ГДЕ
       РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент) КАК РеализацияТоваровУслуг
   левое соединение    
       (ВЫБРАТЬ
           КонтактныеЛицаКонтрагентов.Наименование + ЕСТЬNULL(", тел: " + (ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(17))), "") КАК КЛПлюсТелефон,
           &ТекущийДокумент Как СсылкаНаДокумент
                   ИЗ
           (ВЫБРАТЬ ПЕРВЫЕ 1
               КонтактныеЛицаКонтрагентов.КонтактноеЛицо.Наименование КАК Наименование,
               КонтактныеЛицаКонтрагентов.Ссылка КАК Ссылка,
               КонтактныеЛицаКонтрагентов.КонтактноеЛицо КАК КонтактноеЛицо
           ИЗ
               Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов
           ГДЕ
               КонтактныеЛицаКонтрагентов.Владелец В
                       (ВЫБРАТЬ
                           ВЫБОР
                               КОГДА РеализацияТоваровУслуг.Грузополучатель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                                   ТОГДА РеализацияТоваровУслуг.Контрагент
                               ИНАЧЕ РеализацияТоваровУслуг.Грузополучатель
                           КОНЕЦ КАК Поле1
                       ИЗ
                           Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                       ГДЕ
                           РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент)
               И КонтактныеЛицаКонтрагентов.РольКонтактногоЛица.Наименование = "Ответственный за клиента") КАК КонтактныеЛицаКонтрагентов
               ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
               ПО КонтактныеЛицаКонтрагентов.КонтактноеЛицо = КонтактнаяИнформация.Объект
                   И (КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон))
                   И (КонтактнаяИнформация.Вид.Код = "000000028")) КАК ВложенныйЗапрос
       ПО (ВложенныйЗапрос.СсылкаНаДокумент = РеализацияТоваровУслуг.Ссылка)
ни одной?
35 mikecool
 
27.07.11
16:39
в чем суровость этого понимания?
36 mikecool
 
27.07.11
16:40
т.е. если выбираю скопом весь документ, включая и ТЧ, то нормально, а как только необходимые поля - так сразу нет
37 Axel2009
 
27.07.11
16:46
(36) а реквизита случайно нет никакого РеализацияТоваровУслуг?
38 mikecool
 
27.07.11
19:28
на постгри кто еще проверить этот финт может?
а то я уже в полной прострации (((
39 mikecool
 
28.07.11
15:48
накопал, проблема таки здесь:
               ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
               ПО КонтактныеЛицаКонтрагентов.КонтактноеЛицо = КонтактнаяИнформация.Объект
                   И (КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон))
                   И (КонтактнаяИнформация.Вид.Код = "000000028")

когда нет КЛ, то при попытке присоединить еще и КИ ведет к невыборке данных в целом
40 mikecool
 
28.07.11
15:59
все разобрал, в этом случае рулит доп условие
Или КонтактныеЛицаКонтрагентов.КонтактноеЛицо Есть Null
41 Axel2009
 
28.07.11
16:09
(40) может затык в этом:
(КонтактнаяИнформация.Вид.Код = "000000028")
что ведет к внутреннему соединению...
попробуй
КонтактнаяИнформация.Вид В (ВЫБРАТЬ Ссылка ИЗ Справочник.ВидыКонтактнойИнформации ГДЕ Код = "000000028")..
потому как это фигня то что в (39) по условиям левого соединения. рубиться не может.
42 mikecool
 
28.07.11
16:12
(41) так эта фигня ведет к внутреннему соединению с КонтактнаяИнформация.Вид  или нет?
если так, то по идее не должно в дальнейшем влиять на левое соединение ((
43 Ёпрст
 
гуру
28.07.11
16:42
(34) для начала, псевдонимы вложенных запросов уникальными сделай, хз, как там оно в снеговике их видимость реализована.
44 Ёпрст
 
гуру
28.07.11
16:42
+43.. условий потом никаких нет на ВложенныйЗапрос ?
45 Axel2009
 
28.07.11
17:14
(42) ВНУТРЕННЕЕ СОЕДИНЕНИЕ отфильтрует все что было левым для всех таблиц с лева. и сделает их "внутренним"
46 Ёпрст
 
гуру
28.07.11
17:41
(45) шо за бред ?
47 Axel2009
 
28.07.11
17:57
(46)
ВЫБРАТЬ
   "АА" КАК Поле1
ПОМЕСТИТЬ Т1
;

////////////////////////////////////////////////////////////////////////////////


ВЫБРАТЬ
   "АА" КАК Поле1,
   "ББ" КАК Поле2
ПОМЕСТИТЬ Т2
;

////////////////////////////////////////////////////////////////////////////////


ВЫБРАТЬ
   ОснТабл.Поле1,
   ЕСТЬNULL(ДопТабл.Поле2, "") КАК Ага
ИЗ
   Т1 КАК ОснТабл
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Поле1, Поле2 ИЗ Т2) КАК ДопТабл
       ПО ОснТабл.Поле1 = ДопТабл.Поле1
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Поле1, Поле2 ИЗ Т2 ГДЕ ЛОЖЬ) КАК ДопТабл2
       ПО ДопТабл.Поле1 = ДопТабл2.Поле1
48 Ёпрст
 
гуру
28.07.11
18:05
(47) и че ?
выведет 1 строку из таблицы Т1..
А у автора не выводит НИЧЕГО, фирштейн ?
49 Axel2009
 
28.07.11
18:10
(48) проверял?
50 Fragster
 
гуру
28.07.11
18:32
внутреннее и полное соединение с пустой таблицей дает пустую таблицу
51 Fragster
 
гуру
28.07.11
18:32
левое - нет
52 Ёпрст
 
гуру
28.07.11
18:33
(49) зачем ? Это и так очевидно.
53 Fragster
 
гуру
28.07.11
18:33
(52)->(50)
54 Axel2009
 
28.07.11
18:33
(52) беги соколик, проверяй скока строк у тебя выведет.
55 Axel2009
 
28.07.11
18:34
(50) пример с полным соединением, чтобы дало пустую таблицу?
56 Axel2009
 
28.07.11
18:35
(55)+ ПРАВОЕ даст пустую таблицу.. но не полное..
57 Ёпрст
 
гуру
28.07.11
18:35
(54) для тек кто в танке, проверил в консоли отчетов код в (47)
вывел ОДНУ СТРОКУ.

Дальше беги букварь читай.
58 Axel2009
 
28.07.11
18:37
(57) ага. что за база, что за сервер если есть?
59 Fragster
 
гуру
28.07.11
18:39
(57) j_J
60 Fragster
 
гуру
28.07.11
18:40
(55)

ВЫБРАТЬ
   "АА" КАК Поле1
ПОМЕСТИТЬ Т1
;

////////////////////////////////////////////////////////////////////////////////



ВЫБРАТЬ
   "АА" КАК Поле1,
   "ББ" КАК Поле2
ПОМЕСТИТЬ Т2
;

////////////////////////////////////////////////////////////////////////////////



ВЫБРАТЬ
   ОснТабл.Поле1,
   ЕСТЬNULL(ДопТабл.Поле2, "") КАК Ага
ИЗ
   Т1 КАК ОснТабл,(ВЫБРАТЬ Поле1, Поле2 ИЗ Т2 ГДЕ ЛОЖЬ) КАК ДопТабл
61 Axel2009
 
28.07.11
18:42
(60) это кросс джоин.. не полное
62 Ёпрст
 
гуру
28.07.11
18:43
63 Fragster
 
гуру
28.07.11
18:44
(62) так пусто же...
64 Fragster
 
гуру
28.07.11
18:44
(61) а, ну да
65 Axel2009
 
28.07.11
18:44
(62) а ну я так и думал. шапка таблицы - одна строка
66 Ёпрст
 
гуру
28.07.11
19:26
(65)да , ты прав.. забыл, что хоть и выполняются соединения слева направо, но скулю на это покласть..
67 Axel2009
 
28.07.11
19:28
(66) кем выполняется слева направо?
68 Ёпрст
 
гуру
28.07.11
19:29
вот только у автора не совсем так - у него просто табличка и обычное левое соединение..
69 Ёпрст
 
гуру
28.07.11
19:31
(67) логически, многотабличные соединения выполняются "слева -  направо"
70 Axel2009
 
28.07.11
19:36
(69) ВЫБРАТЬ * ИЗ Табл1 ПРАВОЕ СОЕДИНЕНИЕ Табл2 ПО Табл1.Поле1 = Табл2.Поле1
тоже выполняется "слева - направо"?
71 Ёпрст
 
гуру
28.07.11
19:44
(70) ты не понял..
t1...left join t2 left join t3 ....left join tN

должны выполнятся слева-направо, в начале, t1 c t2 затем результат с t3 и т.д.
Но на самом деле реально это не так.
72 Axel2009
 
28.07.11
19:48
(71) в данном примере что значит "это не так"??
73 Ёпрст
 
гуру
28.07.11
19:50
(72) в каком ?
74 Ёпрст
 
гуру
28.07.11
19:54
Ты вообще, к чему изначально (45) приплёл ?
Ежели у автора в (34) обычное левое соединение.. а то, что с пустой табличкой, пофик - в наборе всё равно будет результат из первой таблички.
75 Axel2009
 
28.07.11
19:57
(74) то что КонтактнаяИнформация.Вид.Код = "000000028"
может превратиться во внутреннее соединение и если КонтактнаяИнформация.Вид NULL, тогда фильтр сработает на всю строку.
76 Ёпрст
 
гуру
28.07.11
21:28
(75) ну и что ?
это же во вложенном подзапросе..
ну вернёт вложенный подзапрос пустую табличку- левое соединение то тут с ней причем ?
Автор еще где-то условие накладывает поди, на сам вложенный подзапрос.
77 mikecool
 
28.07.11
22:15
вот ето диспут ))
применил методику (41), работает
что интересно - изначально у меня так и было, решил проверить свою крутизну и упростить запрос (((
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.