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

基于两列(含非唯一列)关联两张表的SQL查询需求

解决方案:关联两张表查询订单全量数据

嘿,我来帮你搞定这个SQL查询的写法~ 首先得先明确几个关键点,再一步步写出符合需求的查询语句:

1. 先明确表结构与关联逻辑

假设我们给两张表起个直观的别名(你可以替换成实际项目里的表名):

  • 物品信息表:item_info,字段包括 order_number(订单号)、id_number(ID号)、lot_number(批号)
  • 数量跟踪表:quantity_tracking,字段包括 quantity_ready(库存可用量)、quantity_ordered(客户订购量)、quantity_shipped(已发货量),以及和物品表关联的字段(比如id_number或lot_number,你提到其中一列非唯一,这列就是我们的关联键)

2. 选择合适的连接类型

根据你要返回的结果范围,选对应的JOIN:

  • LEFT JOIN:如果要保留所有订单的物品信息,哪怕数量跟踪表中没有匹配的记录(此时数量字段会显示NULL),用这个最稳妥。
  • INNER JOIN:只需要同时存在物品信息和数量记录的订单,就用这个。

3. 基础查询示例

左连接(保留所有订单)

SELECT 
    ii.order_number,
    ii.id_number,
    ii.lot_number,
    qt.quantity_ready,
    qt.quantity_ordered,
    qt.quantity_shipped
FROM 
    item_info ii
LEFT JOIN 
    quantity_tracking qt ON ii.id_number = qt.id_number;

这里用ii和qt作为表别名,让代码更简洁。ON子句里的id_number就是我们的非唯一关联键——如果实际业务是用lot_number关联,把这里改成ii.lot_number = qt.lot_number就行。

内连接(仅取两边都匹配的记录)

把上面的LEFT JOIN换成INNER JOIN即可:

SELECT 
    ii.order_number,
    ii.id_number,
    ii.lot_number,
    qt.quantity_ready,
    qt.quantity_ordered,
    qt.quantity_shipped
FROM 
    item_info ii
INNER JOIN 
    quantity_tracking qt ON ii.id_number = qt.id_number;

4. 处理非唯一关联的重复行问题

因为关联列是非唯一的,很可能出现一对多的匹配(比如一个ID对应多个数量记录),导致查询结果出现重复的订单行。如果需要汇总数量,可以用GROUP BY结合聚合函数:

SELECT 
    ii.order_number,
    ii.id_number,
    ii.lot_number,
    SUM(qt.quantity_ready) AS total_ready,
    SUM(qt.quantity_ordered) AS total_ordered,
    SUM(qt.quantity_shipped) AS total_shipped
FROM 
    item_info ii
LEFT JOIN 
    quantity_tracking qt ON ii.id_number = qt.id_number
GROUP BY 
    ii.order_number, ii.id_number, ii.lot_number;

这个查询会把同一个订单下的所有数量记录汇总成一行,避免重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:03:48