来自SubQuery的Oracle联接表



我正在尝试将一个子查询联接到另一个表。我怎样才能做到这一点?

以下是我正在努力实现的目标。我有一个表1和表2,我已经成功加入。结果如下所示

select max(popi.po_po_id) as PO_ID, 
rps.rp_rp_id_artl as STYLE
from table1 popi
inner join table2 rps
on rps.rp_rp_id_artl = popi.popi_for
where popi.popi_for = '100466'
group by rps.rp_rp_id_artl

结果是:

PO_ID |STYLE |
--------------
1004  |100466|

我现在需要链接上面的结果,这样我就可以链接表3并从表3:中带回sup_id

table3:
PO_ID |SUP_ID
-----------------
1001  |Sup1
1002  |Sup2
1003  |Sup3
1004  |Sup4

最终我得到了以下结果:

PO_ID |STYLE |SUP_ID
-----------------
1004  |100466|Sup4

把桌子连在一起的任何帮助都会很棒。

我试图通过执行子查询,然后将结果连接到主表来实现这一点。

您可以简单地将第一个查询用作内联视图,并将其与第二个表连接起来,如下所示:

select PO_ID, STYLE, table3.sup_id
from (
  select max(popi.po_po_id) as PO_ID, 
  rps.rp_rp_id_artl as STYLE
  from table1 popi
  inner join table2 rps
  on rps.rp_rp_id_artl = popi.popi_for
  where popi.popi_for = '100466'
  group by rps.rp_rp_id_artl
) max_po_by_style
inner join table3
on table3.po_id = max_po_by_style.po_id

同样的效果也可以实现,也许更清楚地说,使用因子子查询:

with max_po_by_style as (
  select max(popi.po_po_id) as PO_ID, 
  rps.rp_rp_id_artl as STYLE
  from table1 popi
  inner join table2 rps
  on rps.rp_rp_id_artl = popi.popi_for
  where popi.popi_for = '100466'
  group by rps.rp_rp_id_artl
select PO_ID, STYLE, table3.sup_id
from max_po_by_style
inner join table3
on table3.po_id = max_po_by_style.po_id
select max(popi.po_po_id) as PO_ID, 
rps.rp_rp_id_artl as STYLE, t3.sup_id
from table1 popi
inner join table2 rps
on rps.rp_rp_id_artl = popi.popi_for
inner join table3 t3
on popi.po_po_id = t3.po_id
where popi.popi_for = '100466'
group by rps.rp_rp_id_artl, t3.sup_id

您可以一次连接多个表-连接可以连接两个、三个或更多的表

正如David Costa所评论的,如果po_po_id存在于表1、表2和表3中,但不是表2中rp_rp_id_artl的最大值,则可能存在问题。因此,该查询可能会返回比将表3与分组的结果连接起来的查询更多的行

最新更新