在mysql中RIGHT JOIN与group by一起使用引起的一个大bug
程序员文章站
2022-03-02 19:09:19
本来按理说这个小问题不值得写一个博客的,不过正是这个小问题造成了一个大bug。 本来每月对数据都好好的,但是这一两天突然发现许多数据明显不对,这一块的代码和sql有些不是我写的,不过出现了bug,还是要迎难而上,我就从数据源头查起,发现数据源好像也没有问题。 地毯式搜索,中间的sql,逻辑一个一个对 ......
本来按理说这个小问题不值得写一个博客的,不过正是这个小问题造成了一个大bug。
本来每月对数据都好好的,但是这一两天突然发现许多数据明显不对,这一块的代码和sql有些不是我写的,不过出现了bug,还是要迎难而上,我就从数据源头查起,发现数据源好像也没有问题。
地毯式搜索,中间的sql,逻辑一个一个对。
突然发现了有个sql有些不对,是个a right join b +group by这种类型的。
左表查出来4条数据,右表6条数据。按理说 右查询的结果,应该也是6条数据,但是结果却是5条数据。
我靠,好奇怪呀!
通过仔细观察,发现左表有两条数据与右表不匹配,然后进行连接查询和group by的时候,这两条数据进行了合并,所以造成了数据错乱。(顺便说,这个sql的bug不是我写的)
解决思路,当执行右查询的时候,在group by的时候一定要group by 右表的字段。(举例,group bu b.ziduan)
那么同理,当执行左查询的时候,在group by的时候一定要group by 左表的字段。(举例,group bu a.ziduan)
以前没有出现这种错误,是因为左表有一条数据或者没有数据与右表不匹配(我试了,如果左表只有一条数据不匹配的话,没有出现数据错乱,不过为了严禁最好还是抒写正确的sql),所以以前没有出现数据错乱的问题。