程序员开发必备经验(3)-使用表连接,连接中间表时必然会出现笛卡尔积

使用表连接,连接中间表时必然会出现笛卡尔积

中间表就是一个多对多的关系两张表生成的中间表。再关联查询这张中间表时必然会出现笛卡尔积,导致重复数据。这是必然的。因为多对多的关系,A表可以有多个B表的数据,B表可以有多个A表的数据。那么查询时就会出现笛卡尔积。即使目前还没出现,那日后也会因为量变引发质变。

解决方式:

1、用临时表分组

比如

select

from

( 和中间表联查的select ) temp

group by xxx

这种方式就是先查出来了,然后把这个结果集当成临时表再进行分组。缺陷显而易见,创建临时表效率肯定不好。

2、在业务层组装数据

先查中间表的数据,并且分好组。得出关联表的字段,比如:id。然后再用这个id去查需要的数据。就是把sql拆分出来。在业务层组装

比如:

-- 中间表得到id

select bizId from 中间表 group by bizId

-- 通过id再去查需要的数据

select id, title, cove_img ... from 业务表 where id in (xxx, xxx, xx)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值