Sql 如何使用同一表的两个实例

Sql 如何使用同一表的两个实例,sql,oracle,Sql,Oracle,我想知道如何在下面的例子中使用同一个表的两个实例,我知道如何做,但我就是不能让它为我的任务工作 我有以下表格: 机构(id_机构,名称) 空间(id\U空间、地址) 报价(身份证代理、身份证空间) 任务:找出两个不同机构提供的空间的地址、机构名称1、机构名称2(两个机构的组合是唯一的) 我尝试的是: (一) (二) 空间 提议 预期产出: Address Name1 Name2 ----------- -------- ------- address1 Agency1

我想知道如何在下面的例子中使用同一个表的两个实例,我知道如何做,但我就是不能让它为我的任务工作

我有以下表格:

  • 机构(id_机构,名称)
  • 空间(id\U空间、地址)
  • 报价(身份证代理、身份证空间)
任务:找出两个不同机构提供的空间的地址、机构名称1、机构名称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
;
这里的“核心功能”是将
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
;