SQL -> проблема объединения таблиц - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть две разные таблицы

Расположение

User_ID       Locarion            start_date      end_date
----------      -------------    -------------   -------------
1               South             1-1-2018        1-5-2018
2               North             1-2-2018        1-11-2018
1               East              1-5-2018        1-9-2018

Пользователь

User_ID       User_name       
----------      -------------   
1               Mary             
2               Sara             

Используя оператор if, чтобы проверить, находится ли текущая дата между звездой и датами окончания, вернуть местоположение как текущее

я хочу, чтобы это была таблица результатов

User_ID       User_name         current_location
----------      -------------   -------------
1               Mary             East
2               Sara             undeined

помогите пожалуйста

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

Попробуйте запрос ниже:

select user_id,user_name,collasce(location,'undefined')
    from usertable u left join locationtable l on u.user_id=l.user_id
    and getdate>=startdate and getdate<=enddate
0 голосов
/ 10 сентября 2018

Это должно быть довольно просто, просто используйте Inner Join on User_ID и оператор case в датах начала и окончания, возвращая местоположение или не определив его.

Или, если есть пользователи без и запись для местоположенияиспользуйте левое соединение, как указано другим человеком, но я бы рекомендовал НЕ использовать МЕЖДУ, если только вы не хотите, чтобы конечная дата была в самом начале даты и не включала всю конечную дату, то есть до полуночи.

0 голосов
/ 10 сентября 2018

Использовать левое соединение с условием соединения на основе дат:

select u.user_id, u.user_name, l.location as current_location
from users u
  left join location l 
         on l.user_id = u.user_id 
        and current_date between l.start_date and l.end_date;

Возвращает местоположение как null, если совпадений нет. Для отображения альтернативного значения используйте coalesce(l.location, 'undefined')

BETWEEN будет включать начальную и конечную дату в качестве действительной «даты местоположения».

Если дата окончания не должна быть включена, вам нужно использовать другое условие соединения:

select u.user_id, u.user_name, l.location as current_location
from users u
  left join location l 
         on l.user_id = u.user_id 
        and l.start_date >= current_date 
        and l.end_date < current_date;

Вы не указали свою СУБД, но выше приведен стандарт ANSI SQL.

Онлайн пример: http://rextester.com/MMHVB20021

...