-2

次の 2 つの SQL ステートメントが異なる結果をもたらす理由を理解しようとしています。1 つ目は期待どおりに機能し、2 つ目はレコードを生成しません。

 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、それ自体の選択ではなく、最後に配置することです。私には、それらが同じ結果を生み出すように思えます。

グレッグ

4

2 に答える 2

1

WHERE2 番目のクエリで基準がめちゃくちゃになっています。これらのステートメントを同じにするには、 を に移動し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
于 2013-09-25T01:07:24.897 に答える