[英]SQL Query that returns parent records regardless if child records are present
我需要构造一个查询来返回父记录(从Meeting表中),而不管子记录是否存在(从ActionItems表中)。 我可以通过LEFT JOIN来做到这一点,但是一旦添加了其他关联的表(Members和Category),该代码将无法工作。
这是我的表的结构:
我需要显示每个会议的信息
ActionIds表中的CategoryId字段可能为空白,即使CategoryId为空白,我也需要显示ActioItem
会议可能没有任何与之关联的操作项,即使没有操作项,也需要返回会议记录
这是我的代码不起作用(我可能需要进行多个查询,这很好):
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.