2014-07-15 101 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