如何编写一个查询,根据 ms 访问的子表中的外键获取信息?

Posted

技术标签:

【中文标题】如何编写一个查询,根据 ms 访问的子表中的外键获取信息?【英文标题】:how to write a query where you get information based on the foreign key from a child table on ms access? 【发布时间】:2020-02-23 15:00:54 【问题描述】:

我正在编写一个数据库,其中有 3 个表来存储数据,第四个表来存储实际操作我根据其外键(用户和课程表)从 2 个表中提取数据,然后我想提取大学名称基于课程表中的大学 ID。例如,如果操作表的课程 Id = 1 的外键,我想从课程表中课程 Id = 1 的大学表中提取名称。

关系:

这是拉取数据的查询,不加拉取学院名

SELECT First_Name, Second_Name, Last_Name, Course_Name, Date_Course, College_Name AS OperationDetails
FROM (Operations INNER JOIN Users ON Operations.User_id = Users.User_Id) INNER JOIN Courses ON 
Operations.course_Id = Courses.Course_Id;

我已尝试加入大学表以提取大学名称,但我没有任何建议如何编写查询。

【问题讨论】:

【参考方案1】:

您需要像这样再次加入Colleges

SELECT Users.First_Name, Users.Second_Name, Users.Last_Name, 
       Courses.Course_Name, Courses.Date_Course, 
       Coleges.College_Name AS OperationDetails
FROM (
  (Operations INNER JOIN Users ON Operations.User_id = Users.User_Id) 
  INNER JOIN Courses ON Operations.course_Id = Courses.Course_Id
)
INNER JOIN Colleges ON Coleges.college_id = Courses.college_id;

最后一次联接基于 Courses 表的 college_id,因为您说:我想从课程表中课程 ID = 1 的大学表中提取名称。 此外,您应该使用表名/别名来限定所有列名,并且在涉及多个表的情况下,您应该使用别名来使代码更短且更具可读性:

SELECT u.First_Name, u.Second_Name, u.Last_Name, 
       c.Course_Name, c.Date_Course, 
       g.College_Name AS OperationDetails
FROM (
  (Operations AS o INNER JOIN Users AS u ON o.User_id = u.User_Id) 
  INNER JOIN Courses AS c ON o.course_Id = c.Course_Id
)
INNER JOIN Colleges AS g ON g.college_id = c.college_id;

【讨论】:

以上是关于如何编写一个查询,根据 ms 访问的子表中的外键获取信息?的主要内容,如果未能解决你的问题,请参考以下文章

mysql中的外键foreign key

oracle查询包含在子表中的主表数据

Oracle表中添加外键约束

Oracle表中添加外键约束

Oracle外键需要建索引吗?

补12.关于mysql的外键约束