首页 > 解决方案 > 无论是否存在子记录都返回父记录的 SQL 查询

问题描述

我需要帮助构建一个返回父记录的查询(来自会议表),无论子记录是否存在(来自 ActionItems 表)。我可以使用 LEFT JOIN 来做到这一点,但是一旦我添加了其他关联的表(成员和类别),代码就不起作用了。

这是我的表的结构:

在此处输入图像描述

我需要显示来自每个会议的信息

  1. ActionItems 表中的 CategoryId 字段可能为空白,即使 CategoryId 为空白,我也需要显示 ActionItem

  2. 会议可能没有与之关联的任何操作项,即使没有操作项也需要返回会议记录

这是我的代码不起作用(我可能需要进行多个查询,这很好):

SELECT  Members.FirtName
        , Members.LastName
        , Meeting.Notes
        , Meeting.Location
        , ActionItems.Details
        , ActionItems.CompleteByDate
        , Category.Name
FROM    Members INNER JOIN 
            (Meetings LEFT JOIN 
                (ActionItems INNER JOIN Category.Id = ActionItems.CategoryId) 
             ON Meeting.Id = ActionItems.MeetingId) 
        ON Members.Id = Meeting.MemberId;

谢谢!

标签: sqlms-accessvba

解决方案


一般来说,在使用的时候LEFT JOIN,它们需要被链接起来——也就是说,所有的连接都应该是外连接。

试试这个:

SELECT mem.FirtName, mem.LastName, m.Notes, m.Location, ai.Details, 
ai.CompleteByDate, c.Name
FROM ((Meetings as m LEFT JOIN
       ActionItems as ai 
       ON m.Id = ai.MeetingId Members
      ) LEFT JOIN
      Category as c
      ON c.Id = ai.CategoryId
     ) LEFT JOIN
     Members mem
     ON mem.Id = m.MemberId;

也就是说,如果会议有多个操作项,则每个成员将针对每个操作项重复。


推荐阅读