我正在尝试将一个子查询联接到另一个表。我怎样才能做到这一点?
以下是我正在努力实现的目标。我有一个表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与分组的结果连接起来的查询更多的行