我必须编写一个查询,以便我需要获取其开始日期为30分钟的事件。 我的条件是:
1)从事件表中获取事件
2)由用户表中带有id的事件创建的加入。
3)评论表中包含用户ser id
的评论但这里的问题是如果事件没有评论那么它自己的事件就不会到来。如果有任何评论存在它就会到来。我不想要这个。如果评论不是那里只是把它取为空但不是隐藏总事件。任何人都可以帮助我,谢谢。
select u.email ,group_members.user_id,users.first_name,u.first_name
as host_name,events.name,events.start_date,comments.comments,c.first_name as
comment_user,comments.id from events
inner join users as u on u.id = events.created_by
inner join comments on events.id = comments.event_id
inner join group_members on events.group_id = group_members.group_id
inner join users as c on comments.from_user = c.id
inner join users on group_members.user_id = users.id
where events.start_date between date_add(now(),interval 1 minute) and date_add(
now(),interval 30 minute)
and group_members.user_status = 2
and events.status = 2
答案 0 :(得分:1)
left join
表需要comments
。我会把那个表放在from
子句的最后。
select u.email, gm.user_id, gu.first_name, u.first_name as host_name,
e.name, e.start_date, c.comments, uc.first_name as comment_user,
c.id
from events e inner join
users u
on u.id = e.created_by inner join
group_members gm
on e.events.group_id = gm.group_id inner join
users gu
on gm.user_id = gu.id left join
comments c
on e.id = c.event_id left join
users uc
on c.from_user = uc.id
where e.start_date between date_add(now(),interval 1 minute) and date_add(now(),interval 30 minute) and
gm.user_status = 2 and
e.status = 2;
在left join
上使用comments
后,您还需要来自用户的left join
。我用别名替换了所有表名 - 这使得更容易跟踪哪个表用于哪个目的。
答案 1 :(得分:0)
使用 INNER JOIN 关键字并选择两列,方法是将关键字设为。
SELECT EMP.EMP_ID, EMP.EMP_NAME, DEPT.DEPT_NAME FROM EMP
INNER JOIN DEPT ON DEPT.DEPT_ID = EMP.DEPT_ID;