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

MySQL如何正确获取包含NULL id_user的表中所有记录

问题分析与解决方案

你的问题出在使用了交叉连接(逗号连接表),这会导致当incident.id_user为NULL时,查询结果出现大量重复数据。具体来说,当incident.id_user is null这个条件成立时,数据库会把users表的每一行都和这条incident记录进行匹配,最终输出的结果会包含多条重复的number值,这显然不是你想要的。

要实现“获取所有包含有效id_user和id_user为NULL的incident记录”的需求,你需要用左外连接(LEFT JOIN),它会保留左表(incident)的所有记录,无论是否能在右表(users)中找到匹配的关联项。

正确的查询语句

SELECT incident.number
FROM incident
LEFT JOIN users ON incident.id_user = users.id;

为什么这个写法正确?

  • LEFT JOIN 会返回incident表的全部记录:对于id_user不为NULL的记录,会匹配对应的users行;对于id_user为NULL的记录,users表的关联字段会显示为NULL,但这条incident记录依然会被保留。
  • 不会产生笛卡尔积导致的重复数据,每一条incident记录只会在结果中出现一次。

如果你的需求只是单纯获取incident表中所有的number(不管是否关联用户),甚至可以简化为:

SELECT number FROM incident;

但如果后续需要关联users表的其他字段(比如用户名),LEFT JOIN的写法会更灵活,能直接扩展查询字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:54:06