SQL查询数据连接具有忽略的空值

时间:2012-05-15 19:56:48

标签: sql-server tsql select-into

我在SQL Server中有一个表,其中包含一个分类帐代码列,该代码通过ledgercode链接到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 

我遇到的问题是表中的某些行对ledgercode列有一个空值,所以这个新表只将484行中的34行拉入表中。

如何绕过空值,以便它们仍会被拉入我的表格?

3 个答案:

答案 0 :(得分:3)

使用LEFT JOIN而不是(隐式)INNER 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 

答案 1 :(得分: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

第三,我是主键和具有相同名称的外键的忠实粉丝。因此,如果您构建了原始表,那么您可以使用一致的命名约定。

答案 2 :(得分:1)

INNER 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 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