2016-09-06 4 views
0

나는 소스 테이블에서 27,074 행을 반환이 쿼리가 있습니다SQL Server의 두 테이블 사이의 차이를 찾기

SELECT 
    [DOC NO] 
    ,[LineNumber] 
    ,[SHEET] 
    ,[TestPkgNo] 
    ,[ITEM CODE] 
FROM 
    [excel].[dbo].[MTO2] 

그리고이 하나 (두 번째 테이블)

SELECT 
    DocumentNumber, LineNumber, SheetNumber, PackageNumber, ItemCode 
FROM 
    [SPMS2].[dbo].[Materials] 
JOIN 
    Lines ON materials.LineId = Lines.Id 
JOIN 
    MaterialDescriptions ON MaterialDescriptions.Id = Materials.MaterialDescriptionId 
JOIN 
    TestPackages ON TestPackages.Id = Materials.TestPackageId 

이 27,032 행을 반환합니다.

내가 두 테이블 사이의 차이를 찾으려면

, 나는 결과는 다음과 같이해야 의미 :

doc line sheet testpack sourcetable secondtable 
** * *  *   ok   not ok 
+0

아래로 투표 의견! –

+0

단순한 왼쪽 조인의 문제점은 무엇입니까? –

+0

@ZoharPeled 네, 차이점을 찾을 수 있습니다. –

답변

1

이 쿼리가 소스 테이블에 존재하지만, 두 번째에 존재하지 않는 모든 레코드를 반환합니다 표.

SELECT 
    [DOC NO] 
    ,[LineNumber] 
    ,[SHEET] 
    ,[TestPkgNo] 
    ,[ITEM CODE] 
FROM 
    [excel].[dbo].[MTO2] sourcetable 

LEFT JOIN 
    (
     SELECT 
      DocumentNumber, LineNumber, SheetNumber, PackageNumber, ItemCode 
     FROM 
      [SPMS2].[dbo].[Materials] 
     JOIN 
      Lines ON materials.LineId = Lines.Id 
     JOIN 
      MaterialDescriptions ON MaterialDescriptions.Id = Materials.MaterialDescriptionId 
     JOIN 
      TestPackages ON TestPackages.Id = Materials.TestPackageId 
    ) secondtable 
ON sourcetable.[DOC NO] = secondtable.DocumentNumber -- Remove conditions that are not needed 
AND sourcetable.[LineNumber] = secondtable.LineNumber -- Remove conditions that are not needed 
AND sourcetable.[SHEET] = secondtable.SheetNumber -- Remove conditions that are not needed 
AND sourcetable.[TestPkgNo] = secondtable.PackageNumber -- Remove conditions that are not needed 
AND sourcetable.[ITEM CODE] = secondtable.ItemCode -- Remove conditions that are not needed 

WHERE secondtable.DocumentNumber IS NULL -- Assuming DocumentNumber is a non-nullable column 
관련 문제