关联查询的一些优化

76 阅读1分钟

需求背景

假设我现在有四张表分别是订单表、订单商品表、发货表、和发货商品表,假设订单表ord_order,有字段id,order_no,商品表为ord_product,有字段order_id(订单 ID)和name(商品名称);发货商品表为ord_delivery_product,有字段delivery_id(发货单 ID)、sku_id(商品 ID);发货表为ord_delivery,有字段id(发货单 ID)delivery_no(发货单 编号)。

期望

查询出订单下各个商品的发货数据,没有发货的也要进行展示, 一个订单有两个商品, 一个订单有两个发货单, 但是这个发货单每次只发了一种商品, 所以按照需求应该展示为三条数据,展示如图 截屏2024-10-23 00.01.17.png

SELECT
	o."id",
	op.sku_id,
	op."name" ,temp.delivery_no,,temp.delivered
FROM
FROM
	ord_order o
	LEFT JOIN ord_product op ON o.ID = op.order_id
	LEFT JOIN (
	SELECT
		o.ID,
		od.delivery_no,
		odp.sku_id,
		odp."name" ,odp.delivered
	FROM
		ord_order o
		LEFT JOIN ord_delivery od ON o.ID = od.order_id
		LEFT JOIN ord_delivery_product odp ON od.ID = odp.delivery_id  
	) temp ON o.ID=temp.ID 
	AND op.sku_id = temp.sku_id 
WHERE
	o.order_no = 'D20241022643731';