代码之家  ›  专栏  ›  技术社区  ›  Tom

显示一个表中的所有记录,如果它们在另一个表上有记录

  •  0
  • Tom  · 技术社区  · 9 年前

    我目前正在寻找做一些我认为非常简单的事情,但由于某种原因我目前缺少了。我有两张表,一张是所有公司司机的列表,另一张是司机最近的事故列表。我想查询一下司机名单,看看他们是否有事故。我现在的查询将只显示发生事故的驾驶员,而不显示没有发生事故的司机。我想这与我的加入有关。

    SELECT DriverProfile.DriverID, DriverProfile.FirstName, DriverProfile.LastName, dbo_manpowerprofile.mpp_senioritydate AS [Seniority Date], Last(Incidents.[Event Date]) AS [Incident Date] FROM (DriverProfile LEFT JOIN dbo_manpowerprofile ON DriverProfile.DriverID = dbo_manpowerprofile.mpp_id) LEFT JOIN Incidents ON DriverProfile.DriverID = Incidents.Driver WHERE (((Incidents.Type)<>"OBS") AND ((Incidents.Preventability)<>"TNP" And (Incidents.Preventability)<>"NTNP") AND ((DriverProfile.ActiveYN)="Y")) GROUP BY DriverProfile.DriverID, DriverProfile.FirstName, DriverProfile.LastName, dbo_manpowerprofile.mpp_senioritydate;

    1 回复  |  直到 9 年前
        1
  •  2
  •   AVG    9 年前

    问题实际上在WHERE子句中。将条件应用于左联接表(dbo_manpowerprofile和Incidents),可以有效地进行这些联接,即内部联接。如果使用Access,则需要为这些表创建单独的查询,并在那里应用条件。然后左键将这些查询连接到DriverProfile。如果您使用的是SQL Server,则可以在联接本身中包含条件。