Sql 如何使用同一表的两个实例
我想知道如何在下面的例子中使用同一个表的两个实例,我知道如何做,但我就是不能让它为我的任务工作 我有以下表格:Sql 如何使用同一表的两个实例,sql,oracle,Sql,Oracle,我想知道如何在下面的例子中使用同一个表的两个实例,我知道如何做,但我就是不能让它为我的任务工作 我有以下表格: 机构(id_机构,名称) 空间(id\U空间、地址) 报价(身份证代理、身份证空间) 任务:找出两个不同机构提供的空间的地址、机构名称1、机构名称2(两个机构的组合是唯一的) 我尝试的是: (一) (二) 空间 提议 预期产出: Address Name1 Name2 ----------- -------- ------- address1 Agency1
- 机构(id_机构,名称)
- 空间(id\U空间、地址)
- 报价(身份证代理、身份证空间)
Address Name1 Name2
----------- -------- -------
address1 Agency1 Agency2
要在一行中获得结果,请按照您的要求,每行各对代理机构:
select S.address as address, A1.name as agency_1, A2.name as agency_2
from offer O1
join offer O2
on O2.id_space = O1.id_space
and O2.id_agency != O1.id_agency
join space S
on S.id_space = O1.id_space
join agency A1
on A1.id_agency = O1.id_agency
join agency A2
on A2.id_agency = O2.id_agency
;
这里的“核心功能”是将offer
no.1(O1
alias)与offer
no.2(O2
alias)在id\u空间
相等但id\u机构
不同的情况下连接起来
一个有趣的练习:要将结果分为多行,每行一个代理:
select S.address, A.name as agency, X.number_of_agencies_per_space
from (
select id_space, id_agency, count(1) over (partition by id_space) as number_of_agencies_per_space
from offer
) X
join space S
on S.id_space = X.id_space
join agency A
on A.id_agency = X.id_agency
where X.number_of_agencies_per_space > 1
;
完成了,谢谢你的帮助。非常感谢你,该死的,我觉得自己太蠢了,我知道我在写代码的时候漏掉了一些东西,我的想法不正确。
id_space address
--------- --------
1 address1
2 address2
3 address3
id_agency id_space
----------- --------
1 1
2 1
3 2
Address Name1 Name2
----------- -------- -------
address1 Agency1 Agency2
select S.address as address, A1.name as agency_1, A2.name as agency_2
from offer O1
join offer O2
on O2.id_space = O1.id_space
and O2.id_agency != O1.id_agency
join space S
on S.id_space = O1.id_space
join agency A1
on A1.id_agency = O1.id_agency
join agency A2
on A2.id_agency = O2.id_agency
;
select S.address, A.name as agency, X.number_of_agencies_per_space
from (
select id_space, id_agency, count(1) over (partition by id_space) as number_of_agencies_per_space
from offer
) X
join space S
on S.id_space = X.id_space
join agency A
on A.id_agency = X.id_agency
where X.number_of_agencies_per_space > 1
;