如何在mysql中执行内连接

时间:2017-03-31 11:12:00

标签: php mysql sql database

我必须编写一个查询,以便我需要获取其开始日期为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

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;