1

私はSQLを学ぼうとしていて、このようなことが可能かどうか疑問に思っています。

Select * 
from RDInfo RD
right outer join RDCollection RDC 
    on (RDC.RDInfoID = RD.RDInfoID and RDC.IsReceived = 1 
        and RDC.IsRenewed = 0) or -- RDInfoID not in table RDC

RDInfoIDにRDCテーブルにレコードがない場合、中括弧で囲まれた3つの条件を満たす場合、RDCollectionからデータを取得しようとしています。これはSQL2005にあります。

はっきりしているといいのですが。これがすぐにできるかどうかはわかりません。助けてくれてありがとう。ありがとう!

したがって、ここでは、すべての従業員が部門に記録を持っている場合と持っていない場合があります。その場合、どのようにできますか

4

3 に答える 3

2

これを試して:

Select * 
from RDInfo RD left outer join
     RDCollection RDC 
    on RDC.RDInfoID = RD.RDInfoID
where (RDC.IsReceived = 1 and RDC.IsRenewed = 0) or rdc.RDInfoID is null

「RDInfoIDがテーブルRDにない」という意味の場合は、右外部結合を使用してrd.RDInfoIdを確認します。

Select * 
from RDInfo RD right outer join
     RDCollection RDC 
    on RDC.RDInfoID = RD.RDInfoID
where (RDC.IsReceived = 1 and RDC.IsRenewed = 0) or rd.RDInfoID is null
于 2012-07-26T18:37:40.497 に答える
1

右ではなく左の結合を使用してください。

Select *  
from RDInfo RD 
left outer join RDCollection RDC  
on (RDC.RDInfoID = RD.RDInfoID and RDC.IsReceived = 1 and RDC.IsRenewed = 0)

RDInfoからの左外部結合エントリを使用すると、RDCollectionに一致するかどうかに関係なく返されます。一致するものがない場合、RDCollectionの列にはnullが含まれます。

于 2012-07-26T18:37:30.760 に答える
0

条件を満たす行にのみ関心がある場合にのみ結合を行う必要があると思います。そうでない場合は、どのテーブルからどの行を使用するかに応じて、左結合または右結合を使用できます。

于 2012-07-26T18:52:01.457 に答える