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

如何用SQL关联Table X与Table Y,对比Item Code和QTY数据?

解决方案:对比两表Item数量并补全缺失值

当然可以实现这个需求!这是个非常典型的跨表数据比对场景,我们可以通过SQL的全连接配合函数来完美达成你想要的结果,下面分数据库场景给出具体实现:

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

直接用全连接合并两个表的所有Item,再用COALESCE()把空值替换为0:

SELECT
    COALESCE(x.[Item Code], y.[Item Code]) AS [Item Code],
    COALESCE(x.QTY, 0) AS [TABLE X QTY],
    COALESCE(y.QTY, 0) AS [Table Y QTY]
FROM TableX x
FULL OUTER JOIN TableY y 
    ON x.[Item Code] = y.[Item Code]
ORDER BY [Item Code];

代码说明:

  • FULL OUTER JOIN:会保留两个表中所有的Item Code记录,不管对方表是否存在该Item
  • COALESCE(a, b):返回参数列表里第一个非空值,这里用来把某表中无对应Item时的NULL QTY替换成0
  • 最后用ORDER BY让结果按Item Code排序,和你给出的示例格式完全匹配

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

如果你的数据库不支持全连接,可以用UNION ALL先合并两表数据,再通过分组和条件聚合实现:

SELECT
    [Item Code],
    SUM(CASE WHEN source = 'X' THEN QTY ELSE 0 END) AS [TABLE X QTY],
    SUM(CASE WHEN source = 'Y' THEN QTY ELSE 0 END) AS [Table Y QTY]
FROM (
    -- 给两表数据加上来源标识后合并
    SELECT [Item Code], QTY, 'X' AS source FROM TableX
    UNION ALL
    SELECT [Item Code], QTY, 'Y' AS source FROM TableY
) AS combined_data
GROUP BY [Item Code]
ORDER BY [Item Code];

代码说明:

  • 子查询用UNION ALL合并两表,并给每条数据标记来源是X还是Y
  • 外层通过GROUP BY [Item Code]聚合,用CASE WHEN分别统计来自X和Y的QTY,不存在的Item自然会统计出0

用以上两种方法中的任意一种,都能得到你期望的对比结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:37:32