一、情景
回复csdn论坛中的一个帖子。
有两张表:
表A:
订单号, 商品
CA801 商品1
CA801 商品2
CA801 商品3
表B:
订单号 优惠卷
CA801 100
实现结果
订单号 优惠卷 商品
CA801 100 商品1
CA801 0 商品2
CA801 0 商品3
二、解决方案
模拟创建两张表:
--表A
CREATE TABLE `orders` (
`orderNo` varchar(10) DEFAULT NULL,
`goodsName` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--表B
CREATE TABLE `coupon` (
`orderNo` varchar(10) DEFAULT NULL,
`couponNum` decimal(10,0) DEFAULT NULL COMMENT '优惠券'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
实现思路:两张表根据订单号分组,然后取第一条记录关联。
sql如下:
select t1.rank,t1.orderNo,ifnull(t2.couponNum,0) as couponNum,t1.goodsName from(
select
if(@ordNo = o.orderNo,@rank := @rank + 1,@rank := 1) as rank,
@ordNo := o.orderNo as orderNo,
o.goodsName
from (select @ordNo := NULL,@rank := 0) r,orders o
order by o.orderNo,o.goodsName
) t1 left join(
select c.orderNo,c.couponNum from coupon c
) t2
on t1.rank=1 and t1.orderNo=t2.orderNo
结果:
1 CA801 100 商品1
2 CA801 0 商品2
3 CA801 0 商品3
1 CA802 50 商品11
2 CA802 0 商品22