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

SQL全外连接:左表字段为NULL时如何取右表对应值?

解决全外连接后Game字段为NULL的问题

一、修改原SQL语句(直接解决NULL问题)

你遇到的问题是全外连接后,Xbox独占游戏在左表(PS4)无对应记录,导致p.Game显示NULL。使用COALESCE()函数即可解决——它会返回参数列表里第一个非NULL的值。同时Genre和Publisher字段也存在相同的NULL问题,建议一并处理。另外原SQL最后一个字段后多了个逗号,需要删除以避免语法错误:

SELECT
  COALESCE(p.Game, x.Game) AS Game,
  COALESCE(p.Genre, x.Genre) AS Genre,
  COALESCE(p.Publisher, x.Publisher) AS Publisher,
  p.North_America AS ps_na,
  p.Europe AS ps_eur,
  p.Japan AS ps_japan,
  p.Rest_of_World AS ps_row,
  x.North_America AS xbox_na,
  x.Europe AS xbox_eur,
  x.Japan AS xbox_japan,
  x.Rest_of_World AS xbox_row
FROM 
  games.ps4 AS p
  FULL JOIN 
    games.xboxone AS x
    USING(Game)

二、更简便的表合并思路

如果你的目标是整合所有游戏的跨平台销售数据,也可以先将两个表统一结构后纵向合并,再通过分组聚合实现横向展示(适合后续扩展更多平台的场景):

WITH combined_sales AS (
  SELECT
    Game,
    Genre,
    Publisher,
    North_America AS na_sales,
    Europe AS eur_sales,
    Japan AS japan_sales,
    Rest_of_World AS row_sales,
    'PS4' AS platform
  FROM games.ps4
  UNION ALL
  SELECT
    Game,
    Genre,
    Publisher,
    North_America,
    Europe,
    Japan,
    Rest_of_World,
    'XboxOne' AS platform
  FROM games.xboxone
)
SELECT
  Game,
  MAX(Genre) AS Genre,
  MAX(Publisher) AS Publisher,
  MAX(CASE WHEN platform = 'PS4' THEN na_sales END) AS ps_na,
  MAX(CASE WHEN platform = 'PS4' THEN eur_sales END) AS ps_eur,
  MAX(CASE WHEN platform = 'PS4' THEN japan_sales END) AS ps_japan,
  MAX(CASE WHEN platform = 'PS4' THEN row_sales END) AS ps_row,
  MAX(CASE WHEN platform = 'XboxOne' THEN na_sales END) AS xbox_na,
  MAX(CASE WHEN platform = 'XboxOne' THEN eur_sales END) AS xbox_eur,
  MAX(CASE WHEN platform = 'XboxOne' THEN japan_sales END) AS xbox_japan,
  MAX(CASE WHEN platform = 'XboxOne' THEN row_sales END) AS xbox_row
FROM combined_sales
GROUP BY Game

这种方法的优势是后续新增其他平台(比如Switch)时,只需在UNION ALL中添加对应表即可,无需修改JOIN逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:01:09