2015-11-14 38 views
1

我在我的查詢中使用簡單的Left Join,但問題查詢未按預期工作。左連接不按預期方式工作

查詢

select m.* from Menu m 
left join MenuRole mr on m.Id=mr.MenuID 
where mr.DesignationID=1 

菜單表

enter image description here

MenuRole表

enter image description here

查詢

enter image description here

的問題是Employee data的輸出從結果失蹤,parentID columnId=0也不翼而飛。

+0

添加您的條件'mr.DesignationID = 1'旁邊的On子句不在Where – EagerToLearn

回答

2

這是由where子句引起的,當threre不匹配時,DesignationId爲null,因此DesignationId = 1不正確。

試試這個:

select m.* from Menu m 
left join MenuRole mr on m.Id=mr.MenuID and mr.DesignationID=1 
+0

感謝您的答覆。它很好,但新條件不起作用'select m。*,mr.DesignationID from Menu m 加入MenuRole mr在m.Id = mr.MenuID 和mr.DesignationID = 1和m.ParentID <> 0' – ksg

+0

感謝隊友的回覆.. – ksg

+1

@ksg move m.ParentID <> 0 to where clause –

0

假設MenuRole是你的 「員工」 的數據,那麼你的問題是M *選擇列表。 MenuRole別名是mr。嘗試選擇*或選擇m。 ,先生。,儘管僅檢索所需的字段被認爲是更好的。

我猜你的ParentID = 0的角色是由你的WHERE子句篩選出來的,雖然有些測試是有保證的。它在MenuRole數據的可見部分中沒有匹配,因此假設它真的不存在,則mr.DesignationID將爲null。