[英]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.