簡體   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