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字段值为NULLCOALESCE(tb.QTY, 0):当tb.QTY为NULL(即Table B无对应ID记录)时,用0替代,确保减法运算后仍保留Table A的原QTY值- 无需
DISTINCT:在无重复ID的场景下,LEFT JOIN不会生成重复行
内容的提问来源于stack exchange,提问作者Chadson
相关产品推荐
相关产品推荐

