这个mysql语句要怎样写

dwtad 2019-06-07 05:24:31
现在有两张表A,B,其中A表中存放的是订单号及产商品清单,B表中存放的是订单号及优惠卷金额;举例如下:
表A:
订单号, 商品
CA801 商品1
CA801 商品2
CA801 商品3

表B:
订单号 优惠卷
CA801 100

想要实现结果,两表联合查询,一张表中能体现订单号,商品,及抵用卷,要求优惠卷不要重复显示,举例如下:
订单号 优惠卷 商品
CA801 100 商品1
CA801 0 商品2
CA801 0 商品3

普通的inner join,优惠卷会有重复数据显示,后期计算的时候,金额会出现偏差,请问这样的sql语句要怎样写呢(数据库是mysql)?
...全文
55 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶遮沉阳 2019-06-08
  • 打赏
  • 举报
回复
模拟创建两张表:

--表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
dwtad 2019-06-08
  • 打赏
  • 举报
回复
@叶遮沉阳,无比感谢,正是如此!

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧