在一个查询中通过三个表检索一个值


Retrieve a value through three tables in a single Query

我已经尝试理解联接有一段时间了,我注意到有很多示例显示了如何使用左/内联接基于两表查询检索值。我将努力为大家举一个例子,希望这将有助于解释我的问题。

表1:project_id |项目名称1个超级项目表2:project_id | course_id--->project_id和course_id是这里的外键。1 3表3:course_id|course_name--->course_id是这里的主键3|写作101

我的目标:

我希望能够使用project_id返回"Writing 101"。因此,如果我知道project_id是1,我会查询数据库,发现与当前项目相关联的course_id是3。然后,我将使用3的course_id来查询表3,并发现相关的course_name是writing 101

有没有一种方法可以在使用某种联接的单个查询中做到这一点

select course_name from Table3
inner join Table2
on Table2.course_id = Table3.course_id
where Table2.project_id = 1

请注意,只需要1个join

还要注意,如果project_id=1存在于一个以上的课程中,则所有这些课程都将出现。

你能解释一下为什么只需要一个连接,而下面的答案需要两个连接吗?

另一个答案不需要两个联接。由于project_id存在于"中间"表中,因此无需在Table1中查找它。现在,如果您需要项目的名称(事实并非如此,因为您在问题中没有提到这一点),那么您必须加入Table1

开始:

SELECT c.course_name
FROM Table3 c
INNER JOIN Table2 pc ON pc.course_id = c.course_id
INNER JOIN Table1 p ON p.project_id = pc.project_id
WHERE project_id = 1