По данным демо версии. Берем двух клиентов, "Фаворит" и "МДБ".Выведем список их операций за 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 добавлены. В этом причина, наверное.