Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема как использовать left join в 1sqlite? (число прочтений - 2884 )
kollodina
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 34
Зарегистрирован: 07. Июля 2008
как использовать left join в 1sqlite?
07. Июля 2008 :: 10:58
Печать  
пишу left join, а работает запрос как inner join. т.е. я соединяю две таблицы и если во второй нет записей, то записи из первой также не попадают в запрос.
так и должно быть ?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: как использовать left join в 1sqlite?
Ответ #1 - 07. Июля 2008 :: 11:04
Печать  
Нет такого. Покажи запрос.
  
Наверх
 
IP записан
 
kollodina
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 34
Зарегистрирован: 07. Июля 2008
Re: как использовать left join в 1sqlite?
Ответ #2 - 07. Июля 2008 :: 11:07
Печать  
кракозябрики вместо русского копируются... а писать - долго
  
Наверх
 
IP записан
 
kollodina
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 34
Зарегистрирован: 07. Июля 2008
Re: как использовать left join в 1sqlite?
Ответ #3 - 07. Июля 2008 :: 11:12
Печать  
ну нормально пишу -
выбираю из одной таблицы а потом пишу left join другая таблица... по общим реквизитам.
причем когда во второй таблице есть записи - то все ОК, если нету - то вобоще пустой результат запроса.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: как использовать left join в 1sqlite?
Ответ #4 - 07. Июля 2008 :: 11:18
Печать  
kollodina писал(а) 07. Июля 2008 :: 11:07:
кракозябрики вместо русского копируются... а писать - долго

Переключишься на русский и копируй.
Известный глюк.
Поищи в нете инструкции, например, по win1251.nls
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kollodina
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 34
Зарегистрирован: 07. Июля 2008
Re: как использовать left join в 1sqlite?
Ответ #5 - 08. Июля 2008 :: 01:50
Печать  
    тз = Запрос.ВыполнитьЗапрос(
     " select Сеть.id [ТорговыйАгент :Справочник.торговаяСеть],
     | (select cast(value as numeric)   from __1S_Const
     |    where id = :ИсторияРеквизита.ТорговаяСеть.Штатный
     |    and date <= :ДатаРекв and objid = Сеть.id
     |    order by date desc limit 1) [Штатный :Число.10.0],
     | (select substr(value,1,9)    from __1S_Const
     |    where id = :ИсторияРеквизита.ТорговаяСеть.территория
     |    and date <= :ДатаРекв and objid = Сеть.id
     |    order by date desc limit 1)  [Территория :Справочник.Территории] ,
     | (select substr(value,1,9)    from __1S_Const
     |    where id = :ИсторияРеквизита.ТорговаяСеть.регион
     |    and date <= :ДатаРекв and objid = Сеть.id
     |    order by date desc limit 1)  [Регион :Справочник.Регионы] ,
     | (select substr(value,1,9)    from __1S_Const
     |    where id = :ИсторияРеквизита.ТорговаяСеть.дивизион
     |    and date <= :ДатаРекв and objid = Сеть.id
     |    order by date desc limit 1)  [дивизион :Справочник.дивизионы] ,      
     | (select substr(value,1,9)    from __1S_Const
     |    where id = :ИсторияРеквизита.ТорговаяСеть.должность
     |    and date <= :ДатаРекв and objid = Сеть.id
     |    order by date desc limit 1) [Должность :Перечисление.ДолжностиТорговли] ,      
     | (select substr(value,1,9)    from __1S_Const
     |    where id = :ИсторияРеквизита.ТорговаяСеть.ВходитВКоманду
     |    and date <= :ДатаРекв and objid = Сеть.id                                 
     |    order by date desc limit 1)  [ВходитВКоманду :Справочник.торговаяСеть],
     |      Данные.торговыйпредставитель, Данные.город, Данные.перечень [Перечень :Перечисление.перечни],
     |      Данные.сумма [Продажи :Число.15.2],
     |    Проценты.id [Сотрудник :Справочник.ПроцентыДляБонуса],
     |    (select cast(value as numeric)   from __1S_Const
     |    where id = :ИсторияРеквизита.ПроцентыДляБонуса.Процент
     |    and date <= :ДатаРекв and objid = проценты.id
     |    order by date desc limit 1) [Процент :Число.15.2]
     | from Справочник_ТорговаяСеть Сеть   
     |left join Справочник_ПроцентыДляБонуса Проценты
     |on (Проценты.сотрудник = Данные.торговыйпредставитель and Проценты.перечень = Данные.перечень)
     | left join регистр_ДанныеСупервайзеров Данные  on (Сеть.id = Данные.торговыйпредставитель )
     |where  Данные.дата= :ДатаРекв
     | order by [Регион :Справочник.Регионы]
     |");
     
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: как использовать left join в 1sqlite?
Ответ #6 - 08. Июля 2008 :: 04:42
Печать  
Надо наверное так:
Код
Выбрать все
|left join регистр_ДанныеСупервайзеров Данные  on (Сеть.id = Данные.торговыйпредставитель )
|left join Справочник_ПроцентыДляБонуса Проценты
|on (Проценты.сотрудник = Данные.торговыйпредставитель and Проценты.перечень = Данные.перечень)
|where  Данные.дата= :ДатаРекв
 


При left join'е порядок таблиц важен.
  
Наверх
 
IP записан
 
kollodina
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 34
Зарегистрирован: 07. Июля 2008
Re: как использовать left join в 1sqlite?
Ответ #7 - 08. Июля 2008 :: 04:45
Печать  
так вот проценты - всегда есть... а в регистре записи - есть не всегда...
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: как использовать left join в 1sqlite?
Ответ #8 - 08. Июля 2008 :: 04:51
Печать  
kollodina писал(а) 08. Июля 2008 :: 04:45:
так вот проценты - всегда есть... а в регистре записи - есть не всегда...

дак вот, если записи есть не всегда, то при LEFT JOIN для "недостающих" записей значение Данные.дата есть NULL. При этом результатом выражения: Данные.дата= :ДатаРекв - будет ложь. Поэтому и записей этих ты не увидишь.

Перенеси Данные.дата= :ДатаРекв в ON
  

1&&2&&3
Наверх
 
IP записан
 
kollodina
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 34
Зарегистрирован: 07. Июля 2008
Re: как использовать left join в 1sqlite?
Ответ #9 - 08. Июля 2008 :: 04:59
Печать  
точно.... как я не догадалась сразу? бестолочь просто... спасибо добрый человек... вчера был явно не мой день
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать