2017-06-29 5 views
0

Ich habe diese beiden Tabellen A und B:SQL zwei Tabellen verbinden die Maximalwerte mit

Table A: 

|--------------|----------------| 
|  ID_A |other attributes| 
|--------------|----------------| 
|  1  |    | 
|  2  |    | 
|  3  |    | 
|  4  |    | 
|--------------|----------------| 

Table B: 

|--------------|----------------|----------------|----------------| 
|  ID_B |  ID_A  | update_time |other attributes| 
|--------------|----------------|----------------|----------------| 
|  1  |  2  |2017/01/01 07:00|    | 
|  2  |  2  |2017/01/01 11:00|    | 
|  3  |  2  |2017/01/01 13:00|    | 
|  4  |  2  |2017/01/01 08:00|    | 
|  5  |  2  |2017/01/01 06:00|    | 
|  6  |  3  |2017/01/01 12:00|    | 
|  7  |  3  |2017/01/01 13:00|    | 
|  8  |  4  |2017/01/01 17:00|    | 
|--------------|----------------|----------------|----------------| 

Jetzt möchte ich das neueste Update Zeit für (aus Tabelle B) jeder in Tabelle A Reihe bekommen Wenn es ist keine Beziehung zwischen Tabelle A und Tabelle B, ich möchte NULL zeigen. Das gewünschte Ergebnis für die oberen Tabellen ist:

|--------|----------------| 
| ID_A | update_time | 
|--------|----------------| 
| 1 |  NULL  | 
| 2 |2017/01/01 13:00| 
| 3 |2017/01/01 13:00| 
| 4 |2017/01/01 17:00| 
|--------|----------------| 

Gibt es eine Möglichkeit, wie diese in SQL zu tun? Auch eine Erklärung wäre in Ordnung. Danke für jede Hilfe!

Antwort

1

Verwenden Sie eine LINKE VERBINDUNG. Dadurch werden NUR die übereinstimmenden Werte aus Tabelle B zurückgegeben und alle Werte aus Tabelle A beibehalten.

Die Unterabfrage von LEFT JOIN gibt ALLE Werte mit ID_A und ihren MAX-Wert von Update_DateTime zurück.

Select a.ID_A 
    b.Update_Time 

FROM TABLE A A 
LEFT JOIN (Select ID_A, max(Update_Time) as Update_Time 
     FROM TABLE B 
     Group by ID_A) B on B.ID_A = A.ID_A 
+0

Danke! Das funktioniert großartig! –

Verwandte Themen