2017-10-15 6 views
0

Ich habe zwei Tabellen, die ich beitreten möchte. Ich möchte Datensätze nach einem bestimmten Datum verknüpfen (CreateDate). Ich möchte keine Aufzeichnungen machen, wenn nichts zusammengefügt werden kann. Ich schließe mich dem Feld Name an. Für einen bestimmten Tag (CreateDate) sollte in beiden Tabellen ein 1: 1-Datensatz nach Name vorhanden sein. Wenn nicht, möchte ich keine eigenständige Aufzeichnung von der ersten oder zweiten Tabelle nehmen. Unter den Beispielen, um eine Ansicht zu machen.Inner Join nur wenn Datensätze zu verbinden

for all tables: 
Id - PK/AI 
Name - varchar 
FieldX/FieldY - varchar 
CreateDate - Datetime 

Tabelle1

ID | Name | FieldX | CreateDate 

Table2

ID | Name | FieldY | CreateDate 

Table3

ID | Name | FieldX | FIeldY | CreateDate 

Beispiel:

Tabelle 1:

1 John value10 2017-09-03 
2 Lili value20 2017-09-03 
3 John value30 2017-10-12 
4 Lili value40 2017-10-12 

Table2:

1 John value50 2017-09-03 
2 Lili value60 2017-09-03 
3 John value70 2017-10-12 
4 Lili value80 2017-04-01 

Nun, wenn ich sage ich für Tag beitreten wollen 2017-09-03 dies sollte Endergebnis sein in

Table3:

John value10 value50 2017-09-03 
Lili value20 value60 2017-09-03 

Für Tag: 2017.10.12 Beachten Sie, dass kein Datensatz für Lili in Tabelle 2 für diesen Tag bedeutet, dass keine Aufzeichnungen gemacht werden (und umgekehrt, wenn nicht wäre in Tabelle 1 und war dieselbe Situation in Tabelle 2 - ich will nicht Datensatz nehmen)

Table3:

John value30 value70 2017-10-12 

ich bisher Was habe, ist dies:

INSERT INTO Table3 (Name, FieldX, FieldY, CreateDate) 
SELECT T1.Name, T1.FieldX, T2.FieldY, T1.CreateDate FROM Table1 As T1 
INNER JOIN Table2 As T2 ON T1.Name=T2.Name 
WHERE T1.CreateDate = '2017-10-12' 

jedoch etwas falsch ist, ich nicht korrekte Ergebnisse erhalten. Kann mir jemand helfen, was ich vermisse?

+0

Aber John hat einen Rekord für '2017-10-12' in beiden Tabellen.Warum erwarten Sie keine Aufzeichnungen für den Beitritt am '2017-10-12'? –

+0

Siehe https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple-sql- query – Strawberry

+0

@TimBiegeleisen genau John hat beide Datensätze in beiden Tabellen für diesen Tag also bedeutet, es ist in Ordnung, einen Datensatz für John beizutreten. Aber nicht Lily hier ist sie nicht da. Das ist richtig – Unknown

Antwort

1

Wenn ich Ihre Frage nicht falsch verstehe, möchten Sie, dass beide Tabellensätze nach dem von Ihnen angegebenen Datum gefiltert werden. In diesem Fall sollten Sie die gleiche Bedingung in WHERE für Ihre zweite Tabelle hinzufügen.

So:

INSERT INTO Table3 (Name, FieldX, FieldY, CreateDate) 
SELECT T1.Name, T1.FieldX, T2.FieldY, T1.CreateDate FROM Table1 As T1 
INNER JOIN Table2 As T2 ON T1.Name=T2.Name 
WHERE T1.CreateDate = '2017-10-12' AND T2.CreateDate = '2017-10-12' 

Hinweis AND T2.CreateDate = '2017-10-12' in WHERE Klausel.

Das scheint so zu funktionieren, wie Sie es beschrieben haben, als ich es getestet habe.

+0

ja scheint, das ist Arbeit. – Unknown