通过Inventories.id关联三表批量查询deliveries记录的SQL写法
批量查询库存对应交付记录SQL方案
表关联关系梳理
涉及三张业务核心表,关联链路清晰:
Inventories:库存主表,主键id为库存唯一标识delivery_items:交付明细表,是库存和交付单的中间关联表,通过fk_inventory字段关联Inventories.id,通过fk_delivery字段关联交付表主键deliveries:交付主表,主键id为交付单唯一标识,存储所有交付单的核心业务信息
手动单条查询的逻辑是先查delivery_items拿到对应fk_delivery,再查deliveries拿交付信息,批量场景下直接用表关联即可,不需要分步查询。
可直接使用的SQL语句
写法1:返回库存+交付明细+交付主表全维度数据
适合需要同时导出库存信息、对应交付明细、交付单信息的统计报表场景:
SELECT inv.id AS inventory_id, -- 按需增删要返回的字段,不需要的字段可以直接注释或删除 inv.goods_name, inv.stock_quantity, di.id AS delivery_item_id, di.delivery_count, d.delivery_no, d.delivery_time, d.receiver, d.delivery_status FROM Inventories inv INNER JOIN delivery_items di ON inv.id = di.fk_inventory INNER JOIN deliveries d ON di.fk_delivery = d.id WHERE inv.id IN ( -- 括号内传入需要查询的库存ID集合,例如 1001,1002,1003 );
写法2:仅返回去重后的交付单记录
如果只需要拿到对应库存关联的所有交付单信息,不需要关联库存维度数据,用这个写法性能更高:
SELECT DISTINCT d.* FROM deliveries d INNER JOIN delivery_items di ON d.id = di.fk_delivery WHERE di.fk_inventory IN ( -- 括号内传入需要查询的库存ID集合 );
性能注意事项
针对15000+条库存ID的查询场景,请提前确认
delivery_items表的fk_inventory、fk_delivery两个外键字段已建立普通索引,正常情况下查询可以在几百毫秒内返回结果,完全满足报表生成的性能要求。
内容的提问来源于stack exchange,提问作者Renan Cidale
相关产品推荐
相关产品推荐

