SQL Server 如果有多个id从一个表指向另一个表,如何连接三个表?[duplicate]

vsikbqxv  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(79)

此问题已存在

How to join three tables or more than three tables if many ID is pointing from one table to another table?
6天前关闭。
我对连接感到困惑,假设我有三个表,分别是student表、course表和teacher表
“学生”表

std_Id    std_Name    course_Id   teacher_Id 
1         Amit         3           1
2         Yogesh       1           1
3         Pravin       3           2 
4         Nilay        1           3 
5         Abhijit      2           3

“课程”表

course_Id   course_Name   std_Id   teacher_Id
1           JAVA           1        3
2           C#             1        3
3           C++            3        1
4           SAP            2        2
5           PYTHON         2        1
6          JAVASCRIPT      3        2

“教师”表

teacher_Id  teacher_Name  std_Id  course_Id
1           Roy            1       1
2           John           2       1
3           Ben            1       3 
4           Renu           2       3
5           Ramesh         1       3

这里我没有给出任何引用键,所以如何连接三个表我在这里给出查询

select Std_Name,Course_Name,Teacher_Name 
from   Student
inner join Course
        on 𝐒𝐭𝐮𝐝𝐞𝐧𝐭.𝐒𝐭𝐝_𝐈𝐝=𝐂𝐨𝐮𝐫𝐬𝐞.𝐂𝐨𝐮𝐫𝐬𝐞_𝐈𝐝 
        or 𝐒𝐭𝐮𝐝𝐞𝐧𝐭.𝐂𝐨𝐮𝐫𝐬𝐞_𝐈𝐝=𝐂𝐨𝐮𝐫𝐬𝐞.𝐒𝐭𝐝_𝐈𝐝 
        or 𝐒𝐭𝐮𝐝𝐞𝐧𝐭.𝐂𝐨𝐮𝐫𝐬𝐞_𝐈𝐝=𝐂𝐨𝐮𝐫𝐬𝐞.𝐂𝐨𝐮𝐫𝐬𝐞_𝐈𝐝 
        or 𝐒𝐭𝐮𝐝𝐞𝐧𝐭.𝐒𝐭𝐝_𝐈𝐝=𝐂𝐨𝐮𝐫𝐬𝐞.𝐒𝐭𝐝_𝐈𝐝
inner join Teacher
        on 𝐂𝐨𝐮𝐫𝐬𝐞.𝐂𝐨𝐮𝐫𝐬𝐞_𝐈𝐝=𝐓𝐞𝐚𝐜𝐡𝐞𝐫.𝐓𝐞𝐚𝐜𝐡𝐞𝐫_𝐈𝐝 
        or 𝐂𝐨𝐮𝐫𝐬𝐞.𝐓𝐞𝐚𝐜𝐡𝐞𝐫_𝐈𝐝=𝐓𝐞𝐚𝐜𝐡𝐞𝐫.𝐂𝐨𝐮𝐫𝐬𝐞_𝐈𝐝 
        or 𝐂𝐨𝐮𝐫𝐬𝐞.𝐓𝐞𝐚𝐜𝐡𝐞𝐫_𝐈𝐝=𝐓𝐞𝐚𝐜𝐡𝐞𝐫.𝐂𝐨𝐮𝐫𝐬𝐞_𝐈𝐝 
        or 𝐂𝐨𝐮𝐫𝐬𝐞.𝐓𝐞𝐚𝐜𝐡𝐞𝐫_𝐈𝐝=𝐓𝐞𝐚𝐜𝐡𝐞𝐫.𝐓𝐞𝐚𝐜𝐡𝐞𝐫_𝐈𝐝

如您所见,这里有三个表,现在我想查看拥有课程的学生和teacher_id,当然,我希望向拥有课程的学生显示此处应使用哪一列,因为在student表中,我们也有std_id和course_id,因此应使用哪一列与course表std_连接id或course_id,在course表中,我们还有course_id和std_id,因此此处应使用哪个列与student表连接,并且我们还希望显示teachers,那么student表也有teacher_id,course表也有teacher_id,因此此处应使用哪个表的列来显示teacher?
那么,这里应该使用什么条件来连接三个表呢,因为在这里,你可以看到很多id,从一个表指向另一个表,这就是为什么我不能理解这个,你知道如何连接这三个表,并得到输出,请帮助我,我怎么能解决这个问题,请让我知道,伙计们,请给予我答案,我上面已经提到了我想在输出中显示的内容。

e4eetjau

e4eetjau1#

您的问题可以使用一些格式,但据我所知,您希望连接3个表,这应该看起来像这样:

select 
   s.Std_Name,
   c.Course_Name,
   t.Teacher_Name 
   from Student s
    inner join Course c on c.Course_ID = s.Course_ID
    inner join Teacher t on t.Course_ID = c.Course_ID

您应该开始使用别名(from Student t),因为它可以使连接和引用表变得更容易、更快。
编辑:
可以这样想上面的查询:Student代表一个(或更多)Courses,每门课程都有一个Teacher来教授它。StudentCourse之间的共同点是Course_id,这就是为什么我们像s.Course_id = c.Course_id这样将它连接起来。现在,我们知道每个Course都有一个Teacher来教导它,所以它们之间的公共项也是Course_id,因此连接如下inner join t.Course_id = c.Course_id

相关问题