2017-07-18 65 views
-2

我在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

你曾試過相同的? –

回答

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; 
+2

不知道爲什麼這是downvoted。看起來不錯,對我來說 – xQbert

+0

這不會給所有的事件,它將忽略空的用戶ID –

+0

@xQbert,難怪...這發生了很多在SO :)只有奇怪的是,這是...沒有理由downvoting已提供 – Rahul

1

如果像特意囑咐,所有事件都需要顯示,但是特定用戶(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 

還有比這樣做的可能更優雅的方式較多,但認爲這不會工作。