假如有订单表(表A),订单货物表(表B),一个订单有多个货物
表A字段:订单ID,状态(未发货、部分发货、已发货)
表B字段:货物ID,所属订单ID,状态(已发货、未发货)
现在要更新订单表A:
如果订单下的货物都为“已发货”,则更新订单状态为“已发货”
如果订单下的货物都为“未发货”,则更新订单状态为“未发货”
如果订单下的货物有的“未发货”有的“已发货”,则更新订单状态为“部分发货”
如何写语句呢?
假如有订单表(表A),订单货物表(表B),一个订单有多个货物
表A字段:订单ID,状态(未发货、部分发货、已发货)
表B字段:货物ID,所属订单ID,状态(已发货、未发货)
现在要更新订单表A:
如果订单下的货物都为“已发货”,则更新订单状态为“已发货”
如果订单下的货物都为“未发货”,则更新订单状态为“未发货”
如果订单下的货物有的“未发货”有的“已发货”,则更新订单状态为“部分发货”
如何写语句呢?
select
a.id,
case
when p.zuida - p.zuixiao = 2 then '部分发货'
when p.qiuhe > 1 then '已发货'
when p.qiuhe < -1 then '未发货'
else '其他'
end type
from
a
left join
(
select
b.id,
max(case type when '已发货' then 1 else -1 end) zuida,
min(case type when '已发货' then 1 else -1 end) zuixiao,
sum(case type when '已发货' then 1 else -1 end) qiuhe
from
b
group by
id
) p on a.id = p.id
;