Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verschachtelte Select-Anweisung in MYSQL-Join

Ich mache diese Art von Abfrage anders, mit einem Ausschluss-Join statt einer Unterabfrage. Sie möchten die Zeilen von B finden, die die maximale Zeit für eine bestimmte ID haben; mit anderen Worten, wo keine andere Zeile eine größere Zeit und dieselbe ID hat.

SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
LEFT OUTER JOIN B AS B2 ON B.ID = B2.ID AND B.Time < B2.Time
WHERE B2.ID IS NULL

Sie können auch eine abgeleitete Tabelle verwenden , die besser abschneiden sollte als die Verwendung einer korrelierten Unterabfrage.

SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
JOIN (SELECT ID, MAX(Time) AS Time FROM B GROUP BY ID) AS B2
  ON (B.ID, B.Time) = (B2.ID, B2.Time)

P.S.:Ich habe die greatest-n-per-group hinzugefügt Schild. Diese Art von SQL-Frage taucht jede Woche bei Stack Overflow auf, sodass Sie diesem Tag folgen können, um Dutzende ähnlicher Fragen und deren Antworten zu sehen.