[英]Inner Join Sql Query
我有一個包含3個表的問題:
1.Review(作業ID)
2.Job(BusinessNumber)
3.業務(BusinessNumber)(外鍵)。
我需要檢索數據並創建具有4列HighestBusiness
, HighestRating
, LowestBusiness
, Lowest 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.