2015-04-11 4 views
0

У меня есть две таблицы базы данных: пользователи и членствообъединить две таблицы, чтобы получить заказ результат

пользователей структура Id, User_Name, Адрес

ЧЛЕНСТВО структуры Id, Дата_начала дата_окончания, user_id

сейчас я хочу получить имена пользователей, у которых пока нет членства, а пользователи с истекшим членством

  • Примечание: соотношение между ними один (пользователь) для многих (членство)

Я пытался объединить эти две таблицы с этим запросом

select users.*, memberships.*, users.id as member_id 
from users 
left outer join memberships 
on memberships.user_id = users.id 
where memberships.user_id is null 
or (memberships.end_date - curdate()) < 0 

, но мне не удалось

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

+0

oh ,, извините выберите пользователей. * (Звезда), членство. * (Звезда) –

ответ

0

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

select u.* 
from users u 
where not exists (select 1 
        from memberships m 
        where m.user_id = u.id and 
         current_date between m.start_date and m.end_date 
       ); 

Вы можете также фраза это как left join:

select u.* 
from users u left outer join 
    memberships m 
    on m.user_id = m.id and 
     current_date between m.start_date and m.end_date 
where m.user_id is null; 

Основная идея здесь поставить сравнение даты в пункте on.

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