如何关联三个SQL数据表并将空白字段赋值为NULL?

关联操作方案
公共字段的匹配规则统一写在JOIN对应的ON子句中即可,通用实现逻辑如下:
- 先确认三张表的公共关联字段,常规业务场景下的对应关系为:
Person(人员表)和Tasks(人员任务映射表)通过人员唯一ID关联,常用字段名如person_idTasks和Task(任务详情表)通过任务唯一ID关联,常用字段名如task_id
- 参考SQL示例
SELECT -- 按需指定输出字段,避免不同表同名字段冲突 p.person_id, p.person_name, t.task_id, t.task_content, ts.task_status FROM Person p FULL JOIN Tasks ts -- 这里写Person和Tasks的公共字段匹配规则,多条件用AND拼接 ON p.person_id = ts.person_id LEFT JOIN Task t -- 这里写Tasks和Task的公共字段匹配规则 ON ts.task_id = t.task_id;
注意事项
- 如果有多个公共匹配字段,可以直接在对应
ON子句后用AND拼接所有匹配条件 - 如果需要对关联后的结果做过滤,过滤条件要写在
WHERE子句中,不要写在ON里,否则会改变关联的匹配范围 - 多表关联出现行数超过单表行数属于正常现象,本质是单条记录匹配到了另一张表的多条对应记录,符合业务逻辑的前提下不需要调整,若需要去重可以在
SELECT后加DISTINCT关键字,或使用GROUP BY按业务需求聚合。
内容的提问来源于stack exchange,提问作者John Simon
相关产品推荐
相关产品推荐

