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

MySQL连接两表时如何保留part_number不匹配的行?

解决方案:获取两表part_number的全量对比(含仅单表存在的记录)

你现在的查询用的是内连接(JOIN),这只会返回两张表中part_number完全匹配的行,再加上current_inv_qty > qb_qty的过滤,自然看不到仅在单表存在的记录。要实现你要的效果,得用全外连接(FULL OUTER JOIN),它能返回两张表的所有记录:既包含part_number匹配的行,也包含仅在current_inv里有、或者仅在qb_inventory_levels_v里有的行。

完整查询语句

SELECT
    sub_2.part_number AS part_number_a,
    sub_1.part_number AS part_number_b,
    sub_2.current_inv_qty AS qty_a,
    sub_1.qb_qty AS qty_b
FROM (
    SELECT part_number, COUNT(part_number) AS current_inv_qty 
    FROM utility_views.current_inv 
    GROUP BY part_number
) sub_2
FULL OUTER JOIN (
    SELECT part_number, SUM(quantityonhand) AS qb_qty 
    FROM qb_inventory_levels_v 
    GROUP BY part_number
) sub_1 ON sub_1.part_number = sub_2.part_number
-- 如果既要保留原查询里"current_inv_qty > qb_qty"的匹配行,又要保留单表存在的记录,就把下面这行注释去掉:
-- WHERE sub_2.current_inv_qty > sub_1.qb_qty OR sub_2.part_number IS NULL OR sub_1.part_number IS NULL

关键说明

  • FULL OUTER JOIN:会涵盖两个子查询结果里的所有行,要是某行只在其中一个子查询里存在,另一子查询对应的字段就会显示成NULL,和你给的示例格式完全对上。
  • 字段别名:特意用part_number_a、part_number_b分别对应两张表的part_number,qty_a、qty_b对应各自的数量,和示例结构保持一致。
  • 可选过滤:如果需要同时保留原查询中current_inv_qty > qb_qty的匹配行,以及仅单表存在的记录,取消最后一行WHERE条件的注释就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:25:39