版权声明:转载请注明原链接 https://blog.csdn.net/cowcomic/article/details/82027454
上周在做一个数据库关联查询的时候遇到一个很奇怪的问题
我的场景是这样的
主要有3张表
a表主要是a.id
b表与a表使用a.id和b.aid一一对应,包含其他内容
c表?与a表是多对一的关系,一个a.id对应多个c.id
我现在需要看一下一个aid对应了多少个cid同时把对应b表中的属性都取出来
使用了两个left join
大概语句是这样的
select a.*,b.*,count(c.id) from a left join b on a.id=b.aid left join c on a.id=c.aid? group by a.id
在具体的使用情况下,发现偶尔b表中的内容查不出来,相同的sql后面简单价格desc的排序就ok,asc的情况下就会有一两条丢失b表中的信息?
查了很久也没查到问题,一直以为是自己的程序或者是sql有问题
后来同事帮忙查到了根源
是mysql5.6的一个bug
mysql5.6在使用group by的时候是会出现这样的问题?,5.5就没有问题
如果依然想在5.6下来满足这样的情景,简单有两种方法,都是修改sql
第一种就是先查出来,再group by,而不是像上面一样查和group同时进行
第二种是枚举字段,字段都使用max函数处理一下,也能解决,字段要多就麻烦了