Oracle 需要选择从子查询到主查询的列

Oracle 需要选择从子查询到主查询的列,oracle,subquery,Oracle,Subquery,我有一个查询,如下表名称等,为了保持实际数据的私密性而更改 SELECT inv.*,TRUNC(sysdate) FROM Invoice inv WHERE (inv.carrier,inv.pro,inv.ndate) IN ( SELECT carrier,pro,n_dt FROM Order where TRUNC(Order.cr_dt) = TRUNC(sysdate) ) 我正在根据订单从发票中选择记录。i、 e.发票中的所有记录与今天的订单记录相同,基于这三列 现在

我有一个查询,如下表名称等,为了保持实际数据的私密性而更改

SELECT inv.*,TRUNC(sysdate)
FROM Invoice inv
WHERE (inv.carrier,inv.pro,inv.ndate) IN
(
    SELECT carrier,pro,n_dt FROM Order where TRUNC(Order.cr_dt) = TRUNC(sysdate)
)
我正在根据订单从发票中选择记录。i、 e.发票中的所有记录与今天的订单记录相同,基于这三列

现在我还想在select查询中从Order中选择Order_Num。。这样我就可以使用整个东西将它插入到完全独立的表中,比如orderedInvoices

insert into orderedInvoices(seq_no,..same columns as Inv...,Cr_dt)
(
    SELECT **Order.Order_Num**, inv.*,TRUNC(sysdate)
    FROM Invoice inv
    WHERE (inv.carrier,inv.pro,inv.ndate) IN
    (
        SELECT carrier,pro,n_dt FROM Order where TRUNC(Order.cr_dt) = TRUNC(sysdate)
    )
)
??-如何在主查询中为该子查询的每个记录选择Order_Num

p、 我知道,如果有索引,trunccr_dt不会在cr_dt上使用索引。。但是我无法选择记录,除非我省略了它的时间部分:

如果表ORDER1在CARRIER、PRO和N_DT上是唯一的,那么您可以使用联接而不是IN来限制记录,它还可以让您从任一表中选择所需的任何数据:

select order.order_num, inv.*, trunc(sysdate)
  from Invoice inv
  join order ord
    on inv.carrier = ord.carrier
   and inv.pro = ord.pro
   and inv.ndate = ord.n_dt
 where trunc(order.cr_dt) = trunc(sysdate)
如果它不是唯一的,则必须使用DISTINCT来消除记录集的重复数据

虽然在CR_DT上使用TRUNC不会在该列上使用索引,但如果确实需要索引,可以在该列上使用函数索引

create index i_order_trunc_cr_dt on order (trunc(cr_dt));
一,。这是一个非常坏的名字,因为它是一个关键字,考虑使用订单。< /P> < P>如果表Orr1在Tabor,Pro和NyDT上是唯一的,你可以使用一个连接来代替你的记录来限制你的记录,它也可以让你从任一个表中选择你想要的任何数据:

select order.order_num, inv.*, trunc(sysdate)
  from Invoice inv
  join order ord
    on inv.carrier = ord.carrier
   and inv.pro = ord.pro
   and inv.ndate = ord.n_dt
 where trunc(order.cr_dt) = trunc(sysdate)
如果它不是唯一的,则必须使用DISTINCT来消除记录集的重复数据

虽然在CR_DT上使用TRUNC不会在该列上使用索引,但如果确实需要索引,可以在该列上使用函数索引

create index i_order_trunc_cr_dt on order (trunc(cr_dt));

一,。这是一个非常坏的名字,因为它是一个关键字,考虑使用订单。< /P>从发票内部连接顺序选择……在.N.No.Tr.C.O.N.DeNe.TrunC.Dyt= TrunSysDist.我会用这个。Order表中有这3列组合的重复记录,希望这也适用于该场景。顺便说一句,如果Orders表在这些列上不是唯一的,因为我得到了一些重复记录,即使该表中有唯一的记录我到底是如何在这里使用distinct的。可能我想使用“group by inv.carrier、inv.pro、inv.ndate”,但如何使用?加入之前,您不需要确保唯一性;但如果你真的想使其唯一,你可以用一个子查询代替order,比如INERNER join select。。。从订单组中按承运商、pro、n_日期选择…其中…从inv.carrier=o.carrier和inv.pro=o.pro和inv.ndate=o.n_日期选择…其中trunco.cr_dt=truncsystate?谢谢@passerway。我会用这个。Order表中有这3列组合的重复记录,希望这也适用于该场景。顺便说一句,如果Orders表在这些列上不是唯一的,因为我得到了一些重复记录,即使该表中有唯一的记录我到底是如何在这里使用distinct的。可能我想使用“group by inv.carrier、inv.pro、inv.ndate”,但如何使用?加入之前,您不需要确保唯一性;但如果你真的想使其唯一,你可以用一个子查询代替order,比如INERNER join select。。。从承运人的订单组,pro,n_date o,其中…感谢您的回答,我只使用了表名作为示例,实际上表名不同:。我认为“Order”表将有3列组合的重复行。。因此,我将使用前面评论中的查询。希望它能工作..谢谢你的回答,我只使用了表名作为示例,实际上表名是不同的:。我认为“Order”表将有3列组合的重复行。。因此,我将使用前面评论中的查询。希望它能起作用。。