我有两个数据库表:用户和成员身份
用户结构
ID,用户名,地址
成员结构
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
但我失败了
请帮忙 :)
最佳答案
如果我理解正确,则希望所有没有当前活动成员资格的用户:
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
子句中。关于mysql - 连接两个表以获得自定义结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29578262/