微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL-选择特定ID的位置,存在其他列的所有不同值

如何解决SQL-选择特定ID的位置,存在其他列的所有不同值

我很难解释标题中要实现的逻辑。

无论如何,我有一个包含两个表(rent和car)的数据库

汽车表包含有关汽车的数据(许可证号等),当前为:

lno,myear,comp,doors,shift,boot,seats
12345678,2020,Ford,4,500,5
23456789,2019,renault,5,1000,7
98765432,2018,1,5
13371337,2000,5

租金表包含有关在租赁公司中获得的租金的数据:

cid,rno,lno,fromdate,todate,wid,amount
55,12345678,2020-04-02,2020-04-11,99,3750
55,98765432,98,4200
54,23456789,2020-10-15,2020-10-17,97,1200
55,13371337,1337

我想查询所有可用公司(福特和雷诺)在此特定请求汽车中订购的cid rno(客户编号,请求编号)。

我通过创建一组每个cid,rno租用的公司并将其与所有可用公司进行比较来实现这一目标:

with all_companies as (
    select array_agg(distinct comp) as all_distinct_companies
    from car
),rents_and_companies as (
         select cid,array_agg(distinct comp) as rent_all_companies
         from rent,car
         where rent.lno = car.lno
         group by cid,rno)
select *
from rents_and_companies
where rent_all_companies = (select all_distinct_companies from all_companies)

返回55,"{Ford,renault}"是因为客户55在请求1中从福特和雷诺订购了一辆汽车(12345678,13371337)。

问题是,我不允许在课堂上使用array_agg,实现此功能的另一种方法是什么?

谢谢

解决方法

如果要避免数组聚合,可以按以下方式编写查询:

select r.cid,r.rno
from rent r
inner join car c on c.lno = r.lno
group by r.cid,r.rno
having count(distinct c.comp) = (select count(distinct comp) from car)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。