2013-08-29 61 views
1

我想通過查看CategoryBusinessMapping和Review Review表來檢索CategoryID和CategoryName。我試圖找回以下類別表的數據:使用三個表查詢SQL數據

Category  ParentCategoryID  CategoryName 
1   null     Education 
2   1     School 
3   null     Health 
4   3     Doctors 
5   1     Colleges 

我有業務表具有BusinessID和BUSINESSNAME和BusinessDescription這樣的:

BusinessID  BusinessName  BusinessDescription 
YP00001  XYZ    ABCD 
YP00002  ABC    XYZA 

我有CategoryBusinessMapping表如下:

MappingID  CategoryID  BusinessID 
1    1    YP00001 
2    2    YP00001 
3    5    YP00001 
4    3    YP00002 
5    4    YP00002 

我有這個映射表來映射不同的類別與業務。我也有評級表是這樣的:

RatingID  BusinessID 
1   YP00001 
2   YP00001 
3   YP00001 
4   YP00002 
5   YP00002 

在這裏,在這個表中,我假定其中具有相同BusinessID紀錄是在秋季最流行的業務。這意味着,在上面的商業ABCD ID = YP00001有四個記錄在評級表中。因此它屬於最受歡迎的商業。同樣,YP00002落在YP00001旁邊。通過以降序查看最受歡迎的業務,我想檢索CategoryName和CategoryID。我曾嘗試這僅從評級表中檢索:

select Distinct ReviewRating.BusinessID 
     ,Count(*)as Rating 
from  YP.utblYPReviewRatingDtls as ReviewRating 
group by ReviewRating.BusinessID 
order by Rating desc 

我已經試過這樣:

SELECT distinct c.CategoryName, b.BusinessID 
    FROM Category c 
    INNER JOIN categoryBusinessMapping cbm 
    ON (c.CategoryID=cbm.CategoryID) 
    INNER JOIN Business b 
    ON (cbm.BusinessID=b.BusinessID) 
    LEFT JOIN Rating r 
    ON (cbm.BusinessID=r.BusinessID) 
    where c.ParentCategoryID is null 

,但我得到的結果是redundent。我也從查詢中刪除BusinessID,我得到的結果,但結果是不正確的。我可以如何刪除Redundency,並得到正確的輸出在這裏查詢。

。請幫幫我。謝謝。

回答

2

使用join和等級表採取BusinessID計數和訂購您的結果

SELECT c.*, COUNT(r.BusinessID) AS bcount FROM Category c 
INNER JOIN CategoryBusinessMapping cbm ON (c.Category=cbm.CategoryID) 
INNER JOIN Business b ON (cbm.BusinessID=b.BusinessID) 
LEFT JOIN Rating r ON (cbm.BusinessID=r.BusinessID) 
GROUP BY r.BusinessID 
ORDER BY bcount DESC