将left join拆分成多条sql语句

本文讲解如何把一条带有一个或多个left join或right join的sql语句拆分成多条sql语句。MySQL进行连表查询效率是很低的,特别是数据很大,而且并发量很高的情况,索引都无法解决问题,最好的办法就是把sql语句拆分成多条单表查询的sql。

我们公司电商网站现在要做网站服务化,用java做中间件,PHP调用java接口获取数据,数据表也进行了拆分,分库,要求不使用连表查询,有连表查询的sql语句想办法拆分多条sql语句,然后统一使用java接口。

这样做的目的一是为了网站服务化做调整,数据的增删查改都封装到具体的业务里面,二是为了提高性能,减少数据库压力,说来说去还是为了提高效率。

我们看看一个join多张表的sql如何拆分多条sql。

select u1.uid,u1.uname,u2.add from user as u1 left join userinfo as u2 on u1.uid=u2.uid left join money as u3 on u1.uid=u3.uid where u1.country='c'

这条sql语句left join三张表,分别是user作为主表,连userinfo,money表。首先可以查出所有user的数据,有了第一条拆分的sql:

select uid,uname from user where country='c'

由于条件是user.uid=userinfo.uid,所以可以把取得的uid用”,”连接,第二个拆分的sql如下:

select uid,add from userinfo where uid in(32,34,23,23)

这样得出了符合第一个left join条件下的uid,uname和add字段的结果,其实到这里就已经实现了以上left join语句的需求,如果还要查询money表的字段,以此类推,把uid作为in的条件查money表。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值