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

MySQL中如何用LEFT JOIN关联两张表并保留NULL值

解决方案

你的思路核心是对的,但有两处需要调整:

  1. 查询字段不全:你当前的SELECT只返回了project_key,没有包含time_spent字段,自然看不到NULL值的显示效果。
  2. 日期条件的位置:如果要准确判断项目在指定日期是否已创建,需要结合项目的创建时间(假设projects表有created_date字段),并将日期条件放在JOIN的ON子句中,而非子查询里。

修正后的SQL(含项目创建时间判断)

假设projects表存在created_date字段记录项目创建日期,SQL如下:

SELECT 
    p.project_key,
    d.time_spent
FROM projects p
LEFT JOIN data d 
    ON p.project_key = d.project_key
    AND CAST(d.date_added AS DATE) = '2022-11-07'
    AND p.created_date <= '2022-11-07' -- 过滤出指定日期前已创建的项目

简化版SQL(无项目创建时间字段)

如果projects表没有记录创建时间,仅需返回所有项目在指定日期的data数据(无数据则显示NULL),可简化为:

SELECT 
    p.project_key,
    d.time_spent
FROM projects p
LEFT JOIN data d 
    ON p.project_key = d.project_key
    AND CAST(d.date_added AS DATE) = '2022-11-07'

逻辑说明

把日期匹配条件放在JOIN的ON子句中,LEFT JOIN会保留projects表的所有记录:

  • 当data表中存在对应项目且日期匹配的记录时,返回对应的time_spent值;
  • 当没有匹配记录(项目未创建或当天无数据)时,time_spent自动显示为NULL。

你之前的子查询写法其实也能保留所有项目,但因为没查询time_spent字段,所以无法看到预期的NULL结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:45:27