-1

次のようにSQLクエリを作成したい:

select *
from vwOrderRNI orni
left join vwOrderRN orn on orn.SysId in 
(
    select associatingid 
    from OrderRNAssociation 
    where AssociatedId = orni.SysId 
    and AssociationName = 'ORNItems'
)

left join vwPOrder po on po.SysId in 
(
    select AssociatingId 
    from PurchaseOAssociation 
    where AssociatedId = orn.SysId 
    and AssociationName = 'PO_OrderRequisitionNotes'
)

left join vwPOItem poi on poi.POrder = 
(
    -- above left join  i want to take po.SysId which is filter because of left join
)

エイリアステーブルで2番目の左結合を作成して、3番目の左結合で使用できるようにするにはどうすればよいですか?

4

2 に答える 2

1

スキーマを知らずに言うのは難しいですが、次のようにクエリを単純化できると思います。この膨大な数のサブクエリはまったく必要ないようです。

select *
from vwOrderRNI as orni
    left outer join OrderRNAssociation as orna on
        orna.AssociatedId = orni.SysId and orna.AssociationName = 'ORNItems'
    left outer join vwOrderRN as orn on orn.SysId = orna.AssociatingId 
    left outer join PurchaseOAssociation as poa on
        poa.AssociatedId = orn.SysId and poa.AssociationName = 'PO_OrderRequisitionNotes'
    left outer join vwPOrder po as on po.SysId = poa.AssociatingId
    left join vwPOItem poi on poi.POrder = po.SysId
于 2013-09-11T18:11:38.210 に答える
1

これをテストするためのテーブルはありませんが、これは一般的にあなたが探しているものだと思います(わかりやすくするためにスペースを追加しました):

select *
from   vwOrderRNI orni

       left join (
           select AssociatingId, AssociatedId, AssociationName
           from   OrderRNAssociation
       ) as orna on orna.AssociatedId = orni.SysID and orna.AssociationName = 'ORNItems'

       left join vwOrderRN orn on orn.SysId = orna.AssociatingId

       left join (
             select AssociatingId , AssociatedId, AssociationName
             from   PurchaseOAssociation 
       ) as poa on orn.SysId = poa.AssociatedId and poa.AssociationName = 'PO_OrderRequisitionNotes'

       left join vwPOrder po on po.SysId = poa.AssociatingId

       left join vwPOItem poi on poi.POrder = poa.AssociatingId

vwPOItemあなたのコメントは を使用して参加することを示唆しているため、正しく参加したかどうかはわかりませんpo.SysIdが、質問は を使用することを示唆していますPurchaseOAssociation.AssociatingId。とにかく、内部結合サブクエリがエイリアス化されているので、必要なものに簡単に変更できます。

于 2013-09-11T18:09:25.830 に答える