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

MySQL两表QTY字段差值计算异常,求正确SQL实现目标结果表

需求与问题

现有两张数据表:

Table A
ID  Name   Price QTY
1   name1  1000  10
2   name2  1200  5

Table B
ID  Name   Price QTY
1   name1  1000  2

期望得到目标结果表Table C:

Table C
ID  Name   Price QTY
1   name1  1000  8
2   name2  1200  5

当前使用的SQL语句:

SELECT DISTINCT ta.name, ta.price,(ta.quantity - tb.quantity) AS quantity FROM TableA AS ta INNER JOIN TableB AS tb ON ta.id = tb.id

执行后实际结果不符合预期,得到:

Table C
ID  Name   Price QTY
1   name1  1000  8
2   name2  1200  3

需要正确的SQL语句实现预期需求。

问题分析与解决方案

问题出在使用了INNER JOIN——它只会返回两张表中ID匹配的行,而你需要保留Table A的所有数据,仅对存在于Table B中的ID做QTY减法,不存在的则保持原数值。

正确的SQL语句如下:

SELECT 
    ta.ID,
    ta.Name,
    ta.Price,
    (ta.QTY - COALESCE(tb.QTY, 0)) AS QTY
FROM TableA ta
LEFT JOIN TableB tb ON ta.ID = tb.ID;

关键说明

  • LEFT JOIN:保留Table A的全部行,Table B中匹配的行正常关联,无匹配的行对应的tb字段值为NULL
  • COALESCE(tb.QTY, 0):当tb.QTY为NULL(即Table B无对应ID记录)时,用0替代,确保减法运算后仍保留Table A的原QTY值
  • 无需DISTINCT:在无重复ID的场景下,LEFT JOIN不会生成重复行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:58:01