2012-05-15 40 views
-1

我有一個SQL Server表中包含通過keyfield鏈接到ledgercode表的分類帳代碼的列。目前列顯示keyfield值,而不是我用這個查詢來創建新表的代碼號:SQL查詢數據聯接具有空值,它忽略

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個拉入表格中。

如何繞過空值以便它們仍然會被拉入我的表中?

+1

你不應該編寫隱式連接,它們是一個sql反模式,它在20年前被更好的顯式連接取代。 – HLGEM

回答

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 
+0

感謝它的工作! – developthestars

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

第三,我在主鍵和具有相同名稱的外鍵的忠實粉絲。因此,如果您構建了原始表,那麼您可以使用一致的命名約定。