Heim >Datenbank >MySQL-Tutorial >Wie rufe ich den neuesten Status für alle Dienste mithilfe eines Inner Joins ab?
Auswahl aus zwei Tabellen mit Inner Join für den neuesten Status
Wenn Sie zwei Tabellen haben, die zusammengehörige Daten enthalten, ist es notwendig, bestimmte Informationen abzurufen aus beiden Tabellen. In diesem Szenario haben Sie zwei Tabellen: Service und Status. In der Diensttabelle werden Namen und IDs gespeichert, während in der Statustabelle der Status und die Zeitstempel der einzelnen Dienste verfolgt werden.
Um den neuesten Status für jeden Dienst abzurufen, können Sie einen Inner-Join-Vorgang verwenden. Das Ziel besteht darin, Zeilen aus beiden Tabellen basierend auf der Spalte „service_id“ zu kombinieren, um sicherzustellen, dass nur die neuesten Statusinformationen zurückgegeben werden.
Leider ruft die von Ihnen erwähnte Abfrage nur den neuesten Status für den Dienst mit service_id = 2 ab. Um diese Einschränkung zu beheben und den neuesten Status für alle Dienste abzurufen, ziehen Sie die folgende geänderte SQL-Anweisung in Betracht:
SELECT ser.id, ser.name, s.status, s.timestamp FROM Service ser INNER JOIN status AS s ON s.service_id = ser.id INNER JOIN ( SELECT service_id, MAX(timestamp) AS MaxDate FROM status GROUP BY service_id ) AS a ON a.service_id = s.service_id AND a.MaxDate = s.timestamp;
Die Unterabfrage innerhalb des letzten inneren Joins eliminiert alle außer dem Status mit den neuesten Zeitstempeln für jeden Dienst. Durch den Vergleich der Service-IDs und den Abgleich mit den neuesten Zeitstempeln können Sie garantieren, dass die Abfrage die gewünschten Ergebnisse liefert:
id | name | status | timestamp |
---|---|---|---|
1 | Test1 | OK | October 15, 2015 09:08:07 |
2 | Test2 | OK | October 15, 2015 10:15:23 |
Das obige ist der detaillierte Inhalt vonWie rufe ich den neuesten Status für alle Dienste mithilfe eines Inner Joins ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!