2013-09-25 3 views
-2

Я пытаюсь понять, почему следующие два оператора SQL дают разные результаты. Первый работает так, как ожидалось, второй не производит записей.Почему разные результаты для двух разных способов написания запроса

Select * from Jet.LayoutListItemEntity_Default itemDefault 
Join Jet.LayoutListEntity b 
on itemDefault.UiKey = b.UiKey 
Left join (Select * from Jet.LayoutListItemEntity where DomainId =2) item 
on itemDefault.BindingPath = item.BindingPath 
where item.DomainId is null 
and b.DomainId = 2 


Select * from Jet.LayoutListItemEntity_Default itemDefault 
Join Jet.LayoutListEntity b 
on itemDefault.UiKey = b.UiKey 
Left join Jet.LayoutListItemEntity item 
on itemDefault.BindingPath = item.BindingPath 
where item.DomainId is null 
and item.DomainId = 2 
and b.DomainId = 2 

Основное отличие заключается в том, что один ставит item.DomainId = 2 в конце, а не в его собственном выборе. Мне кажется, они дали бы те же результаты.

Грег

+2

Любая причина в отношении downvotes? –

ответ

4

Эти условия являются взаимоисключающими:

where item.DomainId is null 
and item.DomainId = 2 

item.DomainID не может быть одновременно NULL и 2

Вы можете перемещать блуждающий где критерии к JOIN критериям:

Select * from Jet.LayoutListItemEntity_Default itemDefault 
Join Jet.LayoutListEntity b 
on itemDefault.UiKey = b.UiKey 
Left join Jet.LayoutListItemEntity item 
on itemDefault.BindingPath = item.BindingPath 
    and item.DomainId = 2 
where item.DomainId is null 
and b.DomainId = 2 
+0

Спасибо. Я не понимал, что вы можете поставить критерии в этом объединении. –

1

Ваши критерии WHERE перепутаны во втором запросе - чтобы сделать эти операторы одинаковыми, переместите and item_DomainId = 2 на JOIN.

Select * from Jet.LayoutListItemEntity_Default itemDefault 
    Join Jet.LayoutListEntity b 
     on itemDefault.UiKey = b.UiKey 
    Left join Jet.LayoutListItemEntity item 
     on itemDefault.BindingPath = item.BindingPath and item.DomainId = 2 
where item.DomainId is null 
    and b.DomainId = 2 
Смежные вопросы