表连接连接条件不当导致查询结果变多

联表的时候需要注意联表的连接条件,因为一般连接其他表只是为了获取其他表的一部分数据,所以主表的一条记录按照连接条件一般情况下只会对应连接表的一条记录。否则可能导致数据比预期要多。(比如查学员的作业,会用作业表作主表)
为什么一般表数据关联都是用主键,主要原因是因为主键索引,还有一个原因是唯一性。
例子:
需求:需要查询学员的课表,同时需要知道课表的课节是否布置作业以及学员是否完成作业。
学员课表:里面本质上就是一个个课节,课节内还存有学员id,代表是谁的课表课节
布置作业:老师可以针对课节布置作业
学员作业:学员针对老师布置的作业去上传自己的作业
一开始我的设计是课表作为主表,通过课节id和布置作业关联,再接着用课表里面的课节id和学员作业表的课节id关联进行查询。但实际数据比预期要多,因为一个课节会有多个人交作业,但我只关联了课节,这样不同人的作业都会被查出来。和需求效果不一致。

分析:
首先,课表连接布置作业表,因为课表里面的课节和老师布置作业是一一对应的。所以直接用课节id去连接就可以了。接着再连接学员作业的时候就需要注意了。因为一个课节,大概率有很多学员会参加,也就意味着会有多个作业。所以不能单纯用课节id去关联;不过也不能单纯用学员id去关联,因为一个学员会交不同课节的作业。综上,需要用课节id和学员id一起作为连接条件去关联表才行,这样才能定位到哪节课哪个人交的作业。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值