通过单个Query中的三个表检索值

时间:2012-03-01 03:04:01

标签: php sql join

我一直试图理解连接一段时间,我注意到很多例子展示了如何使用左/内连接基于双表查询来检索值。我将尝试为你们所有人绘制我的榜样,希望它有助于解释我的问题。

Table 1:
project_id  |  project_name
    1          super-project

Table 2:
project_id  |  course_id       ---> project_id and course_id are foreign keys here.
    1              3

Table 3:
course_id  |  course_name      ---> course_id is a primary key here
    3      |  Writing 101

我的目标:

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

有没有办法在使用某种连接的单个查询中执行此操作?

2 个答案:

答案 0 :(得分:3)

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

请注意,只需要一次加入!

另请注意,如果project_id = 1出现在多个课程中,则会显示所有这些课程。

  

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

另一个答案不需要两个连接。由于project_id存在于“中间”表中,因此无需在Table1中查找它。现在,如果您需要项目的名称(因为您没有在问题中提及,情况并非如此),那么您将不得不加入Table1

答案 1 :(得分:1)

你走了:

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