-1

ledgercode経由でテーブルにリンクされている台帳コードの列を含む SQL Server のテーブルがありますkeyfield。現在、列keyfieldにはコード番号の代わりに値が表示されます。このクエリを使用して新しいテーブルを作成しました。

SELECT [OC_Key]
  ,[OC_PO_PO_DPNo]
  ,[OC_DateofInv]
  ,[V_VendorNo]
  ,[OC_ExpDescrip]
  ,[LedgerCode]
  ,[OC_InvoiceNo]
  ,[OC_DatePosted]
  ,[OC_TotAmount]
  ,[OC_Type]
  ,[OC_Initials]
INTO dbo.OCommittedTbl
FROM [CommittedTbl] CT, [codeLedgerTbl] LT, [VendorTbl] VT
WHERE VT.V_VenKey = CT.OC_VendorName and LT.LedgerKey = CT.OC_LedgerCode 

私が抱えている問題は、テーブル内の一部の行の列に null 値があるledgercodeため、この新しいテーブルは 484 行のうち 34 行のみをテーブルに取り込むことです。

NULL 値をバイパスしてテーブルに取り込まれるようにするにはどうすればよいですか?

4

3 に答える 3

3

(暗黙の) INNER JOIN の代わりに LEFT JOIN を使用します。

SELECT ...
INTO dbo.OCommittedTbl
FROM [CommittedTbl] CT
LEFT JOIN [codeLedgerTbl] LT ON LT.LedgerKey = CT.OC_LedgerCode 
LEFT JOIN [VendorTbl] VT ON VT.V_VenKey = CT.OC_VendorName 
于 2012-05-15T20:00:02.153 に答える
3

まず、JOIN 構文を学習する必要があります。第二に、あなたの質問への答えは左外部結合です:

SELECT [OC_Key], [OC_PO_PO_DPNo], [OC_DateofInv], [V_VendorNo], [OC_ExpDescrip],
       [LedgerCode], [OC_InvoiceNo], [OC_DatePosted], [OC_TotAmount], [OC_Type], [OC_Initials]
INTO dbo.OCommittedTbl
FROM [CommittedTbl] CT left outer join
     [codeLedgerTbl] LT
     on LT.LedgerKey = CT.OC_LedgerCode left outer join
     [VendorTbl] VT
      on VT.V_VenKey = CT.OC_VendorName

3 番目に、私は主キーと外部キーが同じ名前を持つことの大ファンです。したがって、元のテーブルを作成した場合は、一貫した命名規則を使用できます。

于 2012-05-15T20:04:48.213 に答える
1

INNER JOIN は null エントリを除外します。左結合で試してください

SELECT [OC_Key]
  ,[OC_PO_PO_DPNo]
  ,[OC_DateofInv]
  ,[V_VendorNo]
  ,[OC_ExpDescrip]
  ,[LedgerCode]
  ,[OC_InvoiceNo]
  ,[OC_DatePosted]
  ,[OC_TotAmount]
  ,[OC_Type]
  ,[OC_Initials]
INTO dbo.OCommittedTbl
FROM [CommittedTbl] CT
LEFT JOIN [codeLedgerTbl] LT ON LT.LedgerKey = CT.OC_LedgerCode 
LEFT JOIN [VendorTbl] VT ON VT.V_VenKey = CT.OC_VendorName
WHERE VT.V_VenKey = CT.OC_VendorName and LT.LedgerKey = CT.OC_LedgerCode 
于 2012-05-15T20:04:12.177 に答える