Страница 1 из 1

Ошибка с left join

Добавлено: 21 авг 2008, 06:09
veart
IB 7.5.1
Есть запрос:

Код: Выделить всё

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)
Он возвращает 4 записи. Но если убираем left join:
т.е. запрос получается:

Код: Выделить всё

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
- в результате их 170.

Насколько я понял - он условие из 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 и все. Или я не прав? В файрберде подобные запросы проходят.

Добавлено: 21 авг 2008, 09:41
dimitr
бага у них в оптимизаторе. Если в 8.0 запрос работает аналогично, то пиши им в баг-трекер.