2014-07-15 192 views
1

我的數據庫的一個子集,包含3個表從外鍵數量可變的MySQL數據庫中獲取行。

用戶

user_details

任務

用戶表的主柱是:

ID { PK}

用戶詳細信息表包含有關用戶的信息(只有一些用戶有這些詳細信息,學生)。因此,用戶細節表的主要列是:

user_id {PK,FK} | supervisor_id {FK}

supervisor_id是users表中的一個id。每個學生都有一名主管。

最後,還有任務表,其中只有學生創建任務和任務表的主要欄目有:

TASK_ID {PK} | USER_ID {} FK

我有越來越爲一個適當的查詢,如果主管希望看到他的所有學生任務的問題。我知道你可以查詢user_details表中所有擁有主管ID的學生。然後創建另一個查詢,您可以在其中選擇所有user_id匹配執行的第一個查詢的任務。

這似乎不是一個非常高效的去實現這個結果。有更好的選擇嗎?

+1

如何?你如何擁有一個數據庫而不瞭解JOIN?我真的很困惑。 – Strawberry

回答

0

你在找什麼是join。而不是編寫兩個單獨的查詢來獲取信息,聯接將允許您連接在一個查詢中擁有的表,並快速獲取所需的信息。

Select * 
From user_details ud 
    join tasks t 
    on ud.user_id = t.user_id 
Where ud.supervisor_id = ? 

連接本質上允許您從所使用的表的所有列中創建一個大表。 on關鍵字告訴sql哪些值合在一起,以便您知道所有的任務都屬於id與監督者所擁有的id相匹配的學生。然後,你可以從任何一個表中選擇你喜歡的任何列(以及許多其他奇特的東西)。

1
select ud.supervisor_id, ud.user_id, t.task_id 
from user_details ud, users u 
where ud.user_id = t.user_id