我的数据库的一个子集包含3个表
用户
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
与第一个查询执行的任务匹配的所有任务。
这似乎不是一个非常有效的方法来实现这个结果。还有更好的选择吗?
答案 0 :(得分:1)
select ud.supervisor_id, ud.user_id, t.task_id
from user_details ud, users u
where ud.user_id = t.user_id
答案 1 :(得分:0)
您要找的是join。连接不是编写两个单独的查询来获取信息,而是允许您连接一个查询中的表,并更快地获取所需的信息。
Select *
From user_details ud
join tasks t
on ud.user_id = t.user_id
Where ud.supervisor_id = ?
join实际上允许您从正在使用的表的所有列中创建一个大表。 on
关键字告诉sql哪些值组合在一起,以便您知道所有任务都属于id与主管ID相匹配的学生。然后,您可以从任一表格中选择您喜欢的任何列(以及许多其他奇特的东西)。