加入3个表,没有得到期望的结果

问题描述:

我在MySQL的三个表: 活动用户均具有多对多的关系。因此,第三张表参加加入3个表,没有得到期望的结果

表内容:

活动
E_ID,e_content

用户
U_ID,u_details

参加
E_ID,U_ID,主治

考虑让我登录,我的UID是1005 所以我希望看到所有的活动中,我是否感到attanding的evnet但如果我参加Attend.attending列,应该是别人应该null

我尝试了很多连接,但我还没有收到所需的查询。

,如:

select e.e_id,u.u_details,a.attending 
from Events e 
left join attend a on e.e_id = a.e_id 
left join users u on u.u_id = a.U_id 
and u.u_id = 1005; 

与上面的查询,我得到相同的结果对于所有UID

+0

你曾试过相同的? –

你需要做一个LEFT JOIN喜欢这里

select e.e_id,u.u_details,a.attending 
from Events e 
left join attend a on e.e_id = a.e_id 
left join users u on u.u_id = a.U_id 
and u.u_id = 1005; 
+2

不知道为什么这是downvoted。看起来不错,对我来说 – xQbert

+0

这不会给所有的事件,它将忽略空的用户ID –

+0

@xQbert,难怪...这发生了很多在SO :)只有奇怪的是,这是...没有理由downvoting已提供 – Rahul

如果像特意嘱咐,所有事件都需要显示,但是特定用户(1005)所参加的参与者的出席次数=“是”,则需要多于左连接,就好像多个用户正在参加一样,即使未显示u_id,它仍将显示所有参加用户的“是”。

http://sqlfiddle.com/#!9/ed738/3/1

显示查询2左边的连接,然后第二个结果集,它得到了我认为是所需的结果。

select e.e_id,a.u_details,a.attending 
from Events e 
left join (select a.*, u.u_details 
        from attend a 
        INNER join users u ON 
        (a.u_id = u.u_id and u.u_details = 'will')) a on e.e_id = a.e_id 

还有比这样做的可能更优雅的方式较多,但认为这不会工作。