2016-07-14 8 views
0

Ich habe eine Tabelle, die 6 Felder enthält (JobGUID, FunctionName,InFileName,InFileSize,OutFileName,OutFileSize)SQL - Join in derselben Tabelle für passende Felder

One Function ist CheckFile, und der andere ist UnZipFile. Die CheckFile. InFileName und InFileSize sollten gleich UnZipFile sein. OutFileName und OutFileSize. Ich möchte ein JOIN machen, das es mir ermöglicht, beide Seiten nebeneinander zu sehen, damit ich die Übereinstimmung der Dateigrößen vergleichen kann.

Hier ist was ich bisher habe. Es scheint zu funktionieren, aber dupliziert jeden Dateinamen und jede Dateigröße. Es gibt 22 entsprechende Zeilen für CheckFile und 22 Zeilen für UnZipFile. Ich will es nur 22 Zeilen ausgegeben, aber es gibt 44.

SELECT CheckFile.InFileName, CheckFile.InFileSize, 
     UnZipFile.OutFileName, UnZipFile.OutFileSize, 
     CheckFile.InFileSize - UnZipFile.OutFileSize as 'FileSizeDifference' 
FROM [MY_DATABASE].[dbo].[MY_TABLE] CheckFile 
JOIN [MY_DATABASE].[dbo].[MY_TABLE] UnZipFile ON CheckFile.InFileName = UnzipFile.OutFileName 
WHERE CheckFile.JobGUID = 'Some GUID #' 
    and CheckFile.FunctionName = 'CheckFile' 
    and UnZipFile.FunctionName = 'UnZipFile' 
    and CheckFile.InFileName like '%.txt' 
+0

alle Betrogenen auf Spalte infilename oder outfilename in Ihrer Tabelle eine Übereinstimmung [MEIN TISCH]? – xbb

+0

Versuchen Sie 'Select distinct'. –

+0

@DanBracuk danke das hat funktioniert – danglesauce19

Antwort

1

Versuchen

select distinct etc. 

Es sollte den Trick tun.

1

Sie müssen INNER

SELECT CheckFile.InFileName, CheckFile.InFileSize, 
     UnZipFile.OutFileName, UnZipFile.OutFileSize, 
     CheckFile.InFileSize - UnZipFile.OutFileSize as 'FileSizeDifference' 
FROM [MY_DATABASE].[dbo].[MY_TABLE] CheckFile 
**INNER JOIN** [MY_DATABASE].[dbo].[MY_TABLE] UnZipFile ON CheckFile.InFileName = UnzipFile.OutFileName 
WHERE CheckFile.JobGUID = 'Some GUID #' 
    and CheckFile.FunctionName = 'CheckFile' 
    and UnZipFile.FunctionName = 'UnZipFile' 
    and CheckFile.InFileName like '%.txt' 

Per JOIN verwenden: w3schools

INNER JOIN: Gibt alle Zeilen, wenn es mindestens ein Spiel in beiden Tabellen

LEFT JOIN ist: Gibt alle Zeilen aus der linken Tabelle zurück und die übereinstimmenden Zeilen aus der rechten Tabelle

RECHTE VERBINDUNG: Zurück alle Zeilen aus der rechten Tabelle und die entsprechenden Datensätze aus der linken Tabelle

FULL JOIN: Alle Zeilen, wenn es in einem der Tische

+0

Das Wort 'Join' auf seiner eigenen, die in der Frage ist, ist eine implizite innere Join. –

Verwandte Themen