2015-11-14 9 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 column с Id=0 также отсутствует.

+0

Добавить ваше условие 'mr.DesignationID = 1' рядом с предложением On не в Where – EagerToLearn

ответ

2

Это вызвано предложением where, когда threre не соответствует. ОбозначениеId равно null, и поэтому обозначение I = 1 неверно.

Попробуйте это:

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

Спасибо за ответ. Он отлично работает, но новое условие не работает 'select m. *, Mr.DesignationID из меню m left join MenuRole mr on m.Id = mr.MenuID и mr.DesignationID = 1 и m.ParentID <> 0' – ksg

+0

Спасибо помощнику за ответ .. – ksg

+1

@ksg move m.ParentID <> 0 to where раздел –

0

Предполагая MenuRole ваши данные "Сотрудник", то ваша проблема заключается в м * список выбора.. Псевдоним MenuRole - mr. Попробуйте выбрать * или выберите m. , mr., хотя считается, что лучше получить только требуемые поля.

Я предполагаю, что ваша роль с ParentID = 0 проверяется вашим предложением WHERE, хотя некоторые испытания оправданы. Он не соответствует видимой части данных MenuRole, поэтому mr.DesignationID будет null, если предположить, что его действительно нет.

Смежные вопросы