Инфо-Предприятие - Форум
ПрограммыПоддержкаКупитьПартнерам

Вернуться   Инфо-Предприятие - Форум > Платформа разработки > Общий
Регистрация Обмен опытом Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.03.2025, 16:25
Михаил,Тверь Михаил,Тверь вне форума
Гуру
 
Регистрация: 21.01.2008
Адрес: Тверь
Сообщений: 4,223
По умолчанию Как левое соединение в программе работает?

По данным демо версии. Берем двух клиентов, "Фаворит" и "МДБ".Выведем список их операций за 05.03.2015, 3-мя способами. Вот типовая.операция.
Код:
ОПЕРАЦИЯ : Левая
ВЫЧИСЛИТЬ
  ///кли="МДБ"//"Фаворит"
 кли="Фаворит" 
ОТЛАДКА("драйвер")
Б1=ПАРАМЕТР_ЗАПУСКА("")         
соед=СОЗДАТЬ_ОБЪЕКТ("ADODB.Connection")
стр_соед="DRIVER=Firebird/InterBase(r) driver;DATABASE="1+";;CHARSET=UTF8;uid=SYSDBA;PWD=masterkey"
соед.ConnectionString = стр_соед
соед.Open
рст= СОЗДАТЬ_ОБЪЕКТ("ADODB.Recordset")
рст.ActiveConnection = соед
рст.LockType=3
з="SELECT  * FROM c_clients left join ts_operations on KOD_STR=CLIENT_KOD AND OPERDATE='05.03.2015' Where KOD_STR='"+кли+"'"
рст.Open(з)
н=0
ЦИКЛ ПОКА(НЕ рст.EOF)
  ОТЛАДКА(рст.FIELDS["kod_str"].value,рст.FIELDS["numnakl"].value,рст.FIELDS["OPERDATE"].value)
  н++
  рст.MoveNext                                                                                                                                                                      
КОНЕЦ_ЦИКЛА
ОТЛАДКА( "ВСЕГО "+СТР(н))
ОТЛАДКА( "")
ОТЛАДКА( "")

ОТЛАДКА("объект SQL")
                 
т=SQL(з)        
н=0            
ЦИКЛ ПОКА(НЕ  т.КОНЕЦ_ФАЙЛА)
    ОТЛАДКА(т.ПОЛЕ("kod_str"),т.ПОЛЕ("numnakl"),т.ПОЛЕ("OPERDATE") )
    т.СЛЕДУЮЩАЯ
    н++                                                                           
КОНЕЦ_ЦИКЛА
ОТЛАДКА( "ВСЕГО "+СТР(н))
               
               
             
ОТЛАДКА( "")
ОТЛАДКА( "")
          
  ОТЛАДКА("Журнал")
  н=0     
  ЦИКЛ ПО! с_клиенты кл << тс_операции топ (топ.код_клиента=кл.код И кл.код=кли И топ.дата=05.03.2015)
     н++ 
    ОТЛАДКА(кл.код,топ.ном_накл,топ.дата)
  КОНЕЦ_ЦИКЛА
  ОТЛАДКА( "ВСЕГО "+СТР(н))
         
         
КОНЕЦ
У "Фаворита" в этот день операции есть. И все 3 обращения к базе - через драйвер ODBC, объект SQL и журналы ИП возвращают один и тот же результат.
Код:
Mr.sol[5/41:8] драйвер
Mr.sol[18/54:90] Фаворит, , 05.03.2015
Mr.sol[18/54:90] Фаворит, 6, 05.03.2015
Mr.sol[22/58:8] ВСЕГО 2
Mr.sol[23/59:8] 
Mr.sol[24/60:8] 
Mr.sol[26/62:8] объект SQL
Mr.sol[31/67:12] Фаворит, , 05.03.2015
Mr.sol[31/67:12] Фаворит, 6, 05.03.2015
Mr.sol[35/71:8] ВСЕГО 2
Mr.sol[39/75:8] 
Mr.sol[40/76:8] 
Mr.sol[42/78:10] Журнал
Mr.sol[46/82:12] Фаворит, , 05.03.2015
Mr.sol[46/82:12] Фаворит, 6, 05.03.2015
Mr.sol[48/84:10] ВСЕГО 2
У "МДБ" в этот день операций нет. И результаты таковы :
Код:
Mr.sol[5/41:8] драйвер
Mr.sol[18/54:90] МДБ, , 
Mr.sol[22/58:8] ВСЕГО 1
Mr.sol[23/59:8] 
Mr.sol[24/60:8] 
Mr.sol[26/62:8] объект SQL
Mr.sol[35/71:8] ВСЕГО 0
Mr.sol[39/75:8] 
Mr.sol[40/76:8] 
Mr.sol[42/78:10] Журнал
Mr.sol[48/84:10] ВСЕГО 0
Драйвер, как и ожидалось, возвращает единственную запись, поля из "правой" таблицы содержат NULL. Результаты 2-х других обращений вообще пустые. Непонятно, чем эти левые соединения от "INNER" отличаются. Посмотрел сами запросы через отладку, там условия под Where добавлены. В этом причина, наверное.
Ответить с цитированием
Ответ


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Соединение с сайтом не установлено Lev Торговый склад 9 22.10.2022 05:43
Как оприходовать на 10 сч стружку в программе. axinya28 Торговый склад 2 03.03.2016 11:28


Часовой пояс GMT +4, время: 14:51.


vBulletin® Version 3.6.8.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot
© 1999 Новасофт