You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助构建可返回Meeting父记录的SQL查询(含关联表)

解决LEFT JOIN关联多表后的查询问题

看起来你的问题出在JOIN的类型选择和嵌套顺序上,咱们一步步来修正:

问题分析

你的原查询里有两个关键问题:

  • ActionItems和Category用了INNER JOIN,这会直接过滤掉CategoryId为空的ActionItem记录,不符合你"CategoryId为空仍需显示ActionItem"的要求;
  • JOIN的嵌套逻辑不对,导致LEFT JOIN的效果被破坏,无法保证没有ActionItems的Meeting也能被返回。

修正后的查询语句

我们调整JOIN的顺序和类型,确保主表Meetings的所有记录都被保留,同时满足ActionItems和Category的显示要求:

SELECT 
    Members.FirstName,  -- 注意你原拼写的FirtName应该是FirstName
    Members.LastName,
    Meetings.Notes,
    Meetings.Location,
    ActionItems.Details,
    ActionItems.CompleteByDate,
    Category.Name
FROM 
    Meetings
LEFT JOIN ActionItems 
    ON Meetings.Id = ActionItems.MeetingId
LEFT JOIN Category 
    ON Category.Id = ActionItems.CategoryId
INNER JOIN Members 
    ON Members.Id = Meetings.MemberId;

逻辑说明

  1. 以Meetings作为主表:先从Meetings开始查询,确保所有Meeting记录都会被返回,无论是否有关联的ActionItems;
  2. LEFT JOIN ActionItems:关联ActionItems时用LEFT JOIN,这样即使Meeting没有任何ActionItems,Meeting的记录依然会保留,ActionItems相关字段会显示为NULL;
  3. LEFT JOIN Category:关联Category时同样用LEFT JOIN,这样即使ActionItems的CategoryId为空,这条ActionItem的记录也会被保留,Category.Name会显示为NULL;
  4. INNER JOIN Members:这里用INNER JOIN意味着只有关联了Member的Meeting才会被返回,如果你的业务场景允许Meeting没有对应的Member,可以把这里改成LEFT JOIN Members,确保所有Meeting都能被返回。

额外提示

如果你的原代码里Meetings表名被写成了Meeting(比如Meeting.Id),要注意统一表名的拼写,避免语法错误。

内容的提问来源于stack exchange,提问作者Kvo la

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:39:08