Есть запрос:
Код: Выделить всё
select ps.docdate /*, e.basedochead*/
from dochead dh
inner join payspec ps on (ps.basedochead = dh.id_dochead
and dh.dockind in (8,13)
and dh.client_index=1241
and dh.doc_date > :SaldoDate)
left join dochead_export e on (e.dochead=ps.dochead and ps.dockind = 14)
т.е. запрос получается:
Код: Выделить всё
select ps.docdate /*, e.basedochead*/
from dochead dh
inner join payspec ps on ps.basedochead = dh.id_dochead
and dh.dockind in (8,13)
and dh.client_index=1241
and dh.doc_date > :SaldoDate
Насколько я понял - он условие из left join - ps.dockind = 14 применяет уже к результату или к предыдущему inner join (их там действительно 4 записи с ps.dockind = 14), а не как условие присоединения таблицы dochead_export.
По идее left join никак не должен уменьшить количество выбираемых записей. И условие - on (e.dochead=ps.dochead and ps.dockind = 14) - это условие присоединения таблицы. Если оно ложно - прилепи NULL и все. Или я не прав? В файрберде подобные запросы проходят.