我不愿给出一个简单的答案,因为这可能只是您将遇到的许多此类问题的开始。所以我宁愿告诉你我是怎么想的,也许这也会帮助你做其他的事情。
正如上面的评论和其他答案中提到的,将这些视为集合。想想它们是如何相互关联的。然后想想你想取回哪些列,想想你如何确定你想看到哪些行。
因此,首先,我编写了一个 FROM 子句来处理记录的来源(我给它们提供了较短的名称或别名,以便于理解):
FROM Departments d
INNER JOIN Staff s
INNER JOIN Actions a
现在,它们有什么关系?在这种情况下,它们的关系与您提到的 PK -> FK 关系完全一样。所以我将它添加到 FROM 子句中:
FROM Departments d
INNER JOIN Staff s
ON s.DepartmentId = d.DepartmentId
INNER JOIN Actions a
ON a.StaffId = s.StaffId
现在我决定使用 SELECT 子句要返回哪些列:
SELECT userName, firstName, lastName, actionDetails, actionDate
但是我从哪个表中获取这些列?我在以下位置添加表别名:
SELECT s.userName, s.firstName, s.lastName, a.actionDetails, a.actionDate
(请注意,在这种情况下,没有列出现在一个以上的表中,因此别名不是绝对必要的,尽管它们是一种非常好的做法。)
最后,我添加 WHERE 子句:
WHERE d.DepartmentId = 20
或您寻求的任何部门ID。
那么最终的答案是这样的:
SELECT s.userName, s.firstName, s.lastName, a.actionDetails, a.actionDate
FROM Departments d
INNER JOIN Staff s
ON s.DepartmentId = d.DepartmentId
INNER JOIN Actions a
ON a.StaffId = s.StaffId
WHERE d.DepartmentId = 20