繁体   English   中英

SQL查询返回父记录,无论是否存在子记录

[英]SQL Query that returns parent records regardless if child records are present

我需要构造一个查询来返回父记录(从Meeting表中),而不管子记录是否存在(从ActionItems表中)。 我可以通过LEFT JOIN来做到这一点,但是一旦添加了其他关联的表(Members和Category),该代码将无法工作。

这是我的表的结构:

在此处输入图片说明

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

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

  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;

谢谢!

通常,使用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;

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

必须将同一“分支”上的所有联接保留到链的末尾。 因此,在这种情况下,所有与ActionItems连接的内容都必须保持连接状态。 您的选择应该像这样工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM