sql - 无论是否存在子记录都返回父记录的 SQL 查询
问题描述
我需要帮助构建一个返回父记录的查询(来自会议表),无论子记录是否存在(来自 ActionItems 表)。我可以使用 LEFT JOIN 来做到这一点,但是一旦我添加了其他关联的表(成员和类别),代码就不起作用了。
这是我的表的结构:
我需要显示来自每个会议的信息
ActionItems 表中的 CategoryId 字段可能为空白,即使 CategoryId 为空白,我也需要显示 ActionItem
会议可能没有与之关联的任何操作项,即使没有操作项也需要返回会议记录
这是我的代码不起作用(我可能需要进行多个查询,这很好):
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;
也就是说,如果会议有多个操作项,则每个成员将针对每个操作项重复。
推荐阅读
- mysql - 如何对重复的对进行分组并对它们进行查询?
- php - PHP - 寻找一种方法来比较二维数组中的值,然后将具有相同值的数组组合成一个三维数组
- spring-boot - Cloud Foundry Data Flow Server 1.5.1.RELEASE 缺少依赖项
- php - 如何通过单击整行而不是“编辑”按钮来显示模式
- html - 如何在父级的兄弟叠加层之上显示子元素
- arrays - 使用 PIL 中的 fromarray 保存一个 4 通道的图像向量,然后重新读取它
- html - 在 div 中创建 2 个 div 共享空间
- sulu - Sulu:如何为网络空间添加额外的菜单?
- typescript - 类型映射返回联合的类型映射成员的交集
- javascript - 根据 if 语句的位置检查复选框。js