MySql 之 left join 查询结果

MySql 之 left join 查询结果,第1张

班级表

学生表

那么现在有两个需求:

1:找出每个班级的名称及其对应的女同学数量

2:找出一班的同学总数

如果想对右表进行限制,则一定要在on条件中进行,若在where中进行则可能导致数据缺失,导致左表在右表中无匹配行的行在最终结果中不出现;(即使右表中没有数据也要补0进行显示)

如果想对左表进行限制,则一定要在where条件中进行;(右表中没有符合条件的数据,则不显示)

select a.ID,a.TID,a.NAME,b.DATE from (select b.ID,b.TID,b.DATE from B order by ID desc) as b left join A as a on a.TID=b.TID group by b.TID

而且你的表述有问题

1、等于说是 A表全部显示 且显示B 当中跟他关联的TID 最大的 那条记录值

这里应该是:当中跟他关联的ID 最大的

2、达到的效果也不对,因为B表的值写错了。

项目中某个业务列表查询发现速度略慢,看了下sql只是正常的关联查询,并且是小表驱动大表了,explain分析一下之后发现居然是全表扫描

导致该问题的原因是关联字段类型不一致,导致索引失效,我们看一下关联字段的字符集

执行修改语句,将关联字段字符集调整为一致

ALTER TABLE groupon_goods_info CHANGE goods_info_id VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci

修改之后的查询速度


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/8584912.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存