来自SubQuery的Oracle Join Table

时间:2014-11-07 17:06:34

标签: oracle join subquery max distinct

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

以下是我想要实现的目标。 我有一张表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

任何有关加入桌子的帮助都会很棒。

我试图通过执行子查询然后将结果连接到主表来实现此目的。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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评论的那样,如果table1,table2和table3中存在po_po_id,则可能会出现问题,但不是table2中rp_rp_id_artl的最大值。因此,此查询可能会返回更多行,然后返回将table3与分组结果连接起来的查询