我有两个数据库表:用户和成员资格
用户结构 ID,User_Name,地址
会员结构 Id,Start_date,end_date,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 :(得分: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
子句中。