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

如何在同名列上执行JOIN?SQLite无RIGHT/FULL JOIN实现全量合并

SQLite 模拟全连接合并两表数据

需求说明

现有两张表T1和T2,结构如下:

  • 共同字段:ID(主键)、X(由ID生成,ID匹配时X值一致)、Y(同ID下两表值不同)
  • T1额外字段:Z
  • T2额外字段:A

需要查询返回两表所有记录,缺失字段填充NULL,并将两表的Y列分别命名为T1Y和T2Y。

原始表数据

T1表

IDXYZ
1X1Y1Z1
2X2Y2Z2

T2表

IDXYA
2X2Y3A1
3X3Y4A2

正确查询语句

由于SQLite不支持RIGHT JOIN或FULL JOIN,可以通过LEFT JOIN + UNION模拟全连接,语句如下:

SELECT 
    COALESCE(T1.ID, T2.ID) AS ID,
    COALESCE(T1.X, T2.X) AS X,
    T1.Y AS T1Y,
    T2.Y AS T2Y,
    T1.Z,
    T2.A
FROM T1
LEFT JOIN T2 ON T1.ID = T2.ID
UNION
SELECT 
    COALESCE(T1.ID, T2.ID) AS ID,
    COALESCE(T1.X, T2.X) AS X,
    T1.Y AS T1Y,
    T2.Y AS T2Y,
    T1.Z,
    T2.A
FROM T2
LEFT JOIN T1 ON T1.ID = T2.ID
WHERE T1.ID IS NULL
ORDER BY ID;

语句说明

  1. COALESCE函数:优先取T1的ID和X值,当T1无对应记录时取T2的值,保证ID和X列无NULL(符合X由ID生成的规则)。
  2. 第一部分LEFT JOIN:获取T1的所有记录,以及T2中ID匹配的记录。
  3. 第二部分LEFT JOIN + 过滤条件:仅获取T2中不存在于T1的记录(通过WHERE T1.ID IS NULL过滤),避免与第一部分重复。
  4. UNION:合并两个查询结果,自动去重重复的ID=2记录。

查询结果

IDXT1YT2YZA
1X1Y1NULLZ1NULL
2X2Y2Y3Z2A1
3X3NULLY4NULLA2

原语句问题分析

你之前的查询仅选择了T1.ID和T2.ID两个字段,未处理合并后的ID列,也未提取X、Y、Z、A等所需字段,导致结果出现双ID列和NULL的ID值,无法满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:30:50