昨天遇到了一個問題,查詢用戶表中所有用戶名相同的記錄。這個問題乍看很簡單,但是細想起來沒那么容易。頭腦的第一反應就是讀取一個條數據之后循環查找有沒有相同的。。汗!!!這種方法肯定不行,這效率太低了。。。
后來想到的方法是將用戶表內聯查找,如:
select u1.* from M_User u1,M_User u2 where u1.Name = u2.Name and u1.rowid <> u2.rowid
這樣發現解決問題,很開心的繼續做其他的事兒了。。。
但是當整個模塊快做完了的時候測試了下,突然發現,當用戶名相同的記錄多余兩個的時候會出現問題,每條記錄會被查詢出兩次。比如id為1、2、3條記錄的Name都是user1,那么1和3、2和3、1和2會被查詢出來,也就是每條記錄被查出來兩次。這樣是不行的,所以又回頭想sql語句。
最后經過經理的指點,可以使用group by 來做。
select * from M_USER where Name in (select Name ss from M_USER where IsDeleted=0 group by Name having count(*)> 1 )