在mysql中RIGHT JOIN與group by一起使用引起的一個大bug


本來按理說這個小問題不值得寫一個博客的,不過正是這個小問題造成了一個大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),所以以前沒有出現數據錯亂的問題。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com