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

MySQL左连接查询时如何获取右表无匹配行的空数据?

MySQL左连接查询时如何获取右表无匹配行的空数据?

嗨,我来帮你捋捋这个问题哈~你想要的是列出所有文档,同时展示指定用户(比如personId=1)的签名情况,没签的就显示null对吧?

你之前写的SQL踩了个常见的左连接坑:把Signs.personId = 1这个条件放在了WHERE子句里,这就导致结果不符合预期啦。原因是:左连接后,Doc2虽然能关联到Signs里personId=3的记录,但这条行的Signs.personId是3,既不满足=1也不是null,所以被WHERE条件过滤掉了;而你想要的是不管用户有没有签这个文档,所有文档都要出现在结果里,没签的就显示null。

正确的做法是把用户的匹配条件放到LEFT JOIN的ON子句里,这样在连接阶段就只筛选目标用户的签名记录,不会丢失任何文档行。给你写个示例SQL:

SELECT docs.id AS DocId, Signs.SignedAt
FROM docs
LEFT JOIN Signs ON docs.id = Signs.docId AND Signs.personId = 1;

咱们来拆解下这个SQL:

  • 先取出docs表的所有行(也就是Doc1和Doc2)
  • 然后只匹配Signs里同时满足docId等于当前文档id且personId=1的记录
  • 对于Doc1,刚好有符合条件的签名记录,所以返回2023-01-01
  • 对于Doc2,找不到personId=1的签名记录,所以SignedAt字段就显示null,完全符合你想要的结果

备注:内容来源于stack exchange,提问作者Navid_pdp11

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 07:19:29