我在MySql中有三个表: 活动,用户两者都有很多关系。因此,第三个表参加。
表格内容:
活动:
e_id,e_content
用户
u_id,u_details
参加
e_id,u_id,参加
让我们考虑我已登录,我的uid是1005。 所以我希望看到所有事件是否我正在接受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 :(得分:1)
您需要在此处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;
答案 1 :(得分:1)
如果特别要求,所有事件都需要显示,但只是特定用户(1005)参加的地方已经参加=“是”然后需要比左连接多一点,好像多个用户正在参加,它即使未显示u_id,所有参加的用户仍会显示“是”。
http://sqlfiddle.com/#!9/ed738/3/1
显示带有2个左连接的查询,然后显示第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
有很多优雅的方法可以做到这一点,但认为这样做有效。