mysql - 使用三张表查询SQL数据

标签 mysql sql sql-server-2008

我试图通过查看 CategoryBusinessMapping 和 Review Rating 表来检索 CategoryID 和 CategoryName。我正在尝试检索以下 Category 表的数据:

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

我有一个 Business 表,其中包含 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

我有这个映射表来映射不同的类别与业务。我也有这样的 Rating 表:

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

在此表中,我假设具有相同 BusinessID 的记录属于最受欢迎的业务。意思是,在上面 ID = YP00001 的业务 ABCD 在评级表中有四个记录。因此,它属于最受欢迎的业务。同样,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 

但我得到的结果是多余的。我还从查询中删除了 BusinessID 并得到了结果,但结果不正确。如何去除冗余并获得正确的输出?

最佳答案

使用 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

关于mysql - 使用三张表查询SQL数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18507729/

相关文章:

mysql - SQL检索具有多对多关系的相关记录

sql - 在 UNION ALL 上查询时选择带有错误消息的重复记录

mysql - 如何在不手动解析文档的情况下使用java运行.sql文件

sql - 如何在按计数排序的sql表中获取10个中级用户

sql-server-2008 - 在sql中创建返回1000到10000之间随机数的函数

MySQL 存储过程错误 1146

php - 根据ACF关系字段显示 "Related Posts"

mysql - SQL 2 Left Join 带计数的查询

sql - 在事务中更新表(使用 Service Broker 的审计触发器)

php - 使用 PDO 的多个数据库