2012-05-15 4 views
-1

keyfield을 통해 ledgercode 테이블에 연결된 원장 코드 열이 포함 된 SQL Server 테이블이 있습니다. 현재 열 대신 내가 새 테이블 생성이 쿼리를 사용하는 코드 번호의 keyfield 값 표시 : 내가 가지고있는SQL 쿼리 데이터 조인에 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, [codeLedgerTbl] LT, [VendorTbl] VT 
WHERE VT.V_VenKey = CT.OC_VendorName and LT.LedgerKey = CT.OC_LedgerCode 

I의 문제는 테이블의 행의 일부는 ledgercode 열에 null 값을 가지고있다 그렇게 이 새 테이블은 484 개의 행 중 34 개만을 테이블로 끌어옵니다.

null 값을 무시하여 테이블에 계속 가져 오려면 어떻게해야합니까?

+1

암시 적 조인은 작성하지 않아야합니다. 20 년 전에 훨씬 더 명시적인 조인으로 대체 된 SQL 반 패턴입니다. – HLGEM

답변

3

(암시 적) INNER JOIN 대신 LEFT JOIN을 사용하십시오. 내부는 함께하려고 제외에게 null 항목을 가입

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

왼쪽 당신이 가입 구문을 배울 필요가,

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

먼저 가입 할 수 있습니다. 두 번째 질문에 대한 대답은 남아있는 외부 조인 :

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 

셋째, 나는 같은 이름을 가진 기본 키와 외래 키에 큰 팬입니다. 따라서 원본 테이블을 작성한 경우 일관된 명명 규칙을 사용할 수 있습니다.