我想優化這個查詢sql使用計數&group by而不使用不同的關鍵字?
**SELECT * FROM Users WHERE Active = 1 AND UserId IN (SELECT UserId FROM Users_Roles WHERE RoleId IN (SELECT RoleId FROM Roles WHERE PermissionLevel >= 100)) ORDER BY LastName**
執行時間越來越少聞一替換上面的查詢與下面連接,
**SELECT u.* FROM Users u INNER JOIN Users_Roles ur ON (u.UserId = ur.UserId) INNER JOIN Roles r ON (r.RoleId = ur.RoleId) WHERE u.Active = 1 AND r.PermissionLevel > 100 GROUP BY u.UserId ORDER BY u.LastName**
但上面的查詢提供了重複的記錄,因爲我的角色表已超過每個用戶一個入口。
我不能使用DISTINCT因爲是我找到替代SELECT(*)可供選擇COUNT(*)FROM找到計數分頁,然後執行數查詢和結果查詢
計數功能正如我們已經知道,數& GROUP BY一起使用時會導致不好的輸出。
現在我想優化查詢,必須找到的行數的查詢,即計數。請給出更好的方法找出結果。
我不明白是什麼問題。爲什麼'select count()'或者'select count(distinct u.UserId)'滿足你的需求? – paul 2012-07-20 09:44:27
在我的函數中,我將select *從table_name中替換爲從table_name中選擇count(*)作爲count_var。所以在以往任何時候選擇使用不同的*它被替換爲SELECT COUNT(*),所以計數包括重複記錄 – suganya 2012-07-20 10:03:01
然後嘗試'計數(不同的用戶id)' – paul 2012-07-20 10:03:59