@yura_born

Как правильно задать запрос на выборку по LeftJoin?

Имеется 2 таблицы:

table: user
-- id
--fam
--name

table: user_rank
--id
--id_user
--id_rank
--date_start
--date_end

пишу вот такой запрос:
SELECT * FROM user LEFT JOIN user_rank ON user.id = user_rank.id_user WHERE user_rank.date_end is null

Мне необходимо получить значение пользователя и id_rank для пользователя если оно есть в таблице или date_end = Null.
Когда значений в таблице user_rank нет вообще (по умолчанию значения 'Null') либо date_end = null то все нормально отрабатывает, но когда я заполняю таблицу, вставляю значения date_start и date_end, то пользователь из таблицы user мне не показывает....
Какая логика? Может кто из практики подскажет как сделать что бы возвращался пользователь без значений? Может поле какое-нить добавить для контроля.... хз
  • Вопрос задан
  • 46 просмотров
Пригласить эксперта
Ответы на вопрос 2
VladimirAndreev
@VladimirAndreev
php web dev
Ну, у тебя
WHERE user_rank.date_end is null

Оно тебе их и выбирает..
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Так согласно условию в WHERE вам не должно показывать пользователя, у которого date_end заполнено. Вот база и не показывает. Что вы ещё от неё хотите? Что-бы она показала то, что не должна показать?

P.S. Кстати, у вас есть ошибочное понимание.
Когда значений в таблице user_rank нет вообще (по умолчанию значения 'Null')

Когда записи в таблице нет вообще - база на любой столбец записи из user_rank будет говорить, что он null. То есть и столбец `id` будет null, и столбец `id_user`, и `id_rank`, и `date_start`, и `date_end`. Независимо от их значений по умолчанию (null или что-то еще). Таково поведение MySQL при JOIN отсутствующей записи.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы