2016-11-04 7 views
1

Ich brauche eine SQL-Abfrage, für mehrere Bedingung aus 2 Tabellen auswählen.Wählen Sie aus 2 Tabellen mit Bedingungen

table1 
order_row | timestamp | 
----------------------- 
0001  |2016-11-04 | 
0002  |2016-11-04 | 
0003  |2016-11-04 | 
0004  |2016-11-03 | 
0006  |2016-11-03 | 

table2 
order_row | timestamp | 
----------------------- 
0001  |2016-11-05 | 
0002  |2016-11-04 | 
0003  |2016-11-04 | 
0004  |2016-11-04 | 
0005  |2016-11-04 | 
0006  |2016-11-02 | 

Ich möchte alle Zeilen erhalten, so dass ich alle order_row Reihen von table2 wich bekommen sind nicht in table1 und order_row Zeilen aus table2 deren Zeitstempel ist neuer in table2 als table1. Und cheks nur Zeilen aus table 2 wich timestamp neuer als 2016.11.03 Ergebnis muss sein:

order_row | 
---------- 
0001  | because timestamp is newer in table2 
0004  | because timestamp is newer in table2 
0005  | because it's not present in table1 

Antwort

5

Dies sollte es tun:

SELECT t2.* 
FROM Table2 AS t2 
LEFT JOIN Table1 AS t1 
    ON t2.order_row = t1.order_row 
WHERE t1.order_row IS NULL OR t2.`timestamp` > t1.`timestamp` 

Demo here

Edit: Wenn Sie wollen nur Datensätze von table2 neuer als '2016-11-03' betrachtet werden, dann einfach hinzufügen:

t2.`timestamp` > '2016-11-03' AND (... other conditions here ...) 
+0

danke für schnelle antwort. Ich habe eine zusätzliche Frage. wie ich Bedingung hinzufüge, in der Abfrage Zeilen von Tabelle 2 überprüft, in der Zeitstempel zum Beispiel neuer als 2016-11-03 ist. – Kalle

+0

@Kalle Sie können das Prädikat 't2.timestamp> '2016-11-03'' hinzufügen und es mit' t2.timestamp> t1.timestamp' kombinieren, wenn Sie neuere Datensätze * und * nach dem bestimmten Datum aufnehmen möchten. –

+0

alles funktioniert jetzt. Vielen Dank. Ich muss Fragen mehr lernen :) – Kalle

Verwandte Themen