0

t1 と t2 の 2 つのテーブルがあります。t1 はコントラクト番号を保持し、t2 はそれらのコントラクトのコントラクト イベントを保持します。

t1 からのすべてのコントラクトと、t1 に一致する t2 からのすべてのレコードを選択しようとしていますが、t2 と一致しない t1 からのすべてのレコードを返そうとしています。私のクエリは、両方のテーブルに一致するすべてのレコードを返すようです。

私が試してみました:

  • 左結合
  • 内部結合と
  • 左外部結合

それでも同じ結果が得られます。

t1 には 293 の結果が保持され、t2 には 270 のイベントが保持されます。一部の t2 イベントには 1 つの contractid に対して複数のイベントがあり、一部のアカウントにはイベントが登録されていません。

すべての とそれにcontractIDリンクされたすべてのイベントを戻したいのですが、イベントがなく、列contractIDに null があるコントラクトも返したいです。contractID

私の現在のクエリ:

            SELECT  p.contractfk 
                    ,[GetEnddate](p.ContractFK) [Contract End Date] -- function
                    ,CASE 
                                WHEN c.StartDate IS NULL THEN 1
                                WHEN c.StartDate > ce.CreatedDate THEN 1
                                ELSE 0
                                END [PreEngineer]
                    ,CASE 
                                WHEN c.StartDate < ce.CreatedDate THEN 1 ELSE 0
                                END [PostEngineer]
            FROM [CRM].[pbx].[PBX] p
                    LEFT JOIN [ContractEnquiry] ce
                        ON ce.ContractFK = p.ContractFK 
                    LEFT JOIN [Contract] c
                        ON [c].[contractID] = [P].[contractfk]
4

2 に答える 2

1

クエリは基本的な左外部結合です。

select t1.*, t2.*
from t1 left outer join
     t2
     on t1.contractId = t2.ContractId;

その後、 1 つの契約を取得する場合は、次の中から選択しt1てくださいt2

select t1.*, t2.*
from t1 left outer join
     t2
     on t1.contractId = t2.ContractId
where t1.contractId = MYCONTRACTID;

からお選びt2いただくと、left outer join背中が になりますinner join

于 2013-08-05T16:25:51.803 に答える