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

SQL执行Full Outer Join无法获取全部行的问题求助

问题分析与解决

问题原因

你得到的结果中,表2独有的Extra Active 28 pc 54g记录的Category和Date显示为Null,是因为查询时直接引用了单一表(比如表1)的Category和Date字段。当这条记录仅存在于表2时,表1对应的字段值为Null,导致结果中这两个字段显示为空。

解决方案

使用COALESCE函数获取两个表中Category和Date的非空值,确保无论记录来自哪张表,都能显示正确的分类和日期。同时根据数据库类型编写正确的Full Outer Join语句:

1. 支持FULL OUTER JOIN的数据库(如SQL Server、PostgreSQL)

SELECT 
    COALESCE(t1.Category, t2.Category) AS Category,
    COALESCE(t1.Date, t2.Date) AS Date,
    t1.Sales_1,
    t2.Sales_2
FROM 
    table1 t1
FULL OUTER JOIN 
    table2 t2 ON t1.Category = t2.Category AND t1.Date = t2.Date;

2. 不支持FULL OUTER JOIN的数据库(如MySQL)

通过LEFT JOIN + RIGHT JOIN + UNION ALL模拟实现:

SELECT 
    COALESCE(t1.Category, t2.Category) AS Category,
    COALESCE(t1.Date, t2.Date) AS Date,
    t1.Sales_1,
    t2.Sales_2
FROM 
    table1 t1
LEFT JOIN 
    table2 t2 ON t1.Category = t2.Category AND t1.Date = t2.Date

UNION ALL

SELECT 
    COALESCE(t1.Category, t2.Category) AS Category,
    COALESCE(t1.Date, t2.Date) AS Date,
    t1.Sales_1,
    t2.Sales_2
FROM 
    table1 t1
RIGHT JOIN 
    table2 t2 ON t1.Category = t2.Category AND t1.Date = t2.Date
WHERE 
    t1.Category IS NULL;

说明

  • COALESCE(a, b)会返回第一个非空参数值:记录来自表2时取t2的Category和Date,来自表1时取t1的,匹配的记录则取任意一个(值相同)。
  • 同时用Date辅助关联,可避免同一分类不同日期的记录错误匹配(适用于存在多日期数据的业务场景)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:55:31