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

无PK/FK约束下SQL多表关联查询保留NULL值方案咨询

SQL查询问题修复方案

问题原因

你当前使用的默认JOIN本质是INNER JOIN,仅会返回关联双方字段完全匹配且非NULL的行,只要任意关联字段为NULL或无匹配值,整行结果就会被过滤,因此会出现经理CityID为NULL时整行不返回的问题。该问题同时还会过滤掉没有经理、或员工自身CityID为NULL的员工数据,不符合你的需求。

修复方案

将所有JOIN替换为LEFT JOIN(左连接)即可。左连接会保留左表的所有行,右表匹配失败或关联字段为NULL时,对应返回字段会自动填充为NULL,完全满足你要求的不丢行、空值直接显示NULL的规则,且仅调整关联逻辑,未使用主键、外键,符合作业要求。
修改后完整语句如下:

SELECT
  CONCAT(e.FirstName, ' ', e.LastName) AS 'EmployeeName',
  c.CityName AS 'EmployeeCity',
  CONCAT(m.FirstName, ' ', m.LastName) AS 'ManagerName',
  ci.CityName AS 'ManagerCity'
FROM
  EMPLOYEE e
  LEFT JOIN EMPLOYEE m ON e.ManagerID = m.EmployeeID
  LEFT JOIN CITY c ON e.CityID = c.CityID
  LEFT JOIN CITY ci ON m.CityID = ci.CityID;

可选优化(按需使用)

如果所用数据库中CONCAT函数存在单参数为NULL则整体返回NULL的特性(例如MySQL),可以将名字拼接逻辑替换为CONCAT_WS(' ', 名, 姓),该函数会自动跳过NULL值,仅拼接非空的名字字段,避免因单个名字字段为空导致整个姓名返回NULL的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 08:36:04