我有两个数据库表:用户和成员身份

用户结构
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/

10-11 01:38