繁体   English   中英

内部联接Sql查询

[英]Inner Join Sql Query

我有一个包含3个表的问题:

1.Review(作业ID)

2.Job(BusinessNumber)

3.业务(BusinessNumber)(外键)。

我需要检索数据并创建具有4列HighestBusinessHighestRatingLowestBusinessLowest Rating

select business.businessname AS HIGHESTRATEDBUSINESS, 
        max(review.reviewrating) as HIGHEST
from business 
    inner join job 
        on job.selectedbusinessabnnumber=business.abnnumber 
    inner join review 
        on review.jobid=job.jobid 
where review.reviewrating = (select max(reviewrating)
                             from review)  
GROUP BY businessname 
UNION 
select business.businessname AS LOWESTRATEDBUSINESS, 
     MIN(review.reviewrating) as HIGHEST
from business 
    inner join job 
        on job.selectedbusinessabnnumber=business.abnnumber 
    inner join review 
         on review.jobid=job.jobid 
where review.reviewrating = (select MIN(reviewrating)
                               from review)
GROUP BY businessname
/

到目前为止,我还没有创建表,我只是想显示四列。

UNION运算符从具有相同投影的两个集合中产生一个结果集。 您需要的是四列的新投影。 因此,将两个子查询转换为内联视图并使用CROSS JOIN:

select h.highestratedbusiness
       , h.highest
       , l.lowestratedbusiness
       , l.lowest
from
    (select business.businessname AS HIGHESTRATEDBUSINESS, 
            max(review.reviewrating) as HIGHEST
    from business 
        inner join job 
            on job.selectedbusinessabnnumber=business.abnnumber 
        inner join review 
            on review.jobid=job.jobid 
    where review.reviewrating = (select max(reviewrating)
                                from review)  
    GROUP BY businessname ) h
cross join 
        (select business.businessname AS LOWESTRATEDBUSINESS, 
             MIN(review.reviewrating) as HIGHEST
        from business 
            inner join job 
                on job.selectedbusinessabnnumber=business.abnnumber 
            inner join review 
                 on review.jobid=job.jobid 
        where review.reviewrating = (select MIN(reviewrating)
                                       from review)
        GROUP BY businessname ) l
/

交叉联接为联接集中的每个记录组合生成一个记录。 当数据产生一项最高评级的业务和一项最低评级的业务时,这将很好。 但是,如果一个或两个位置都存在平局,它将生成笛卡尔乘积。 有很多解决方法,因此,如果这对您不利,请完善您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM