sql >> Database teknologi >  >> RDS >> Mysql

Indlejret Vælg-sætning i MYSQL join

Jeg udfører denne type forespørgsel anderledes med et ekskluderingsjoin i stedet for en underforespørgsel. Du vil finde rækkerne af B, som har den maksimale tid for et givet ID; med andre ord, hvor ingen anden række har en større Tid og samme ID.

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

Du kan også bruge en afledt tabel , som burde yde bedre end at bruge en korreleret underforespørgsel.

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.:Jeg har tilføjet den greatest-n-per-group tag. Denne type SQL-spørgsmål dukker op hver uge på Stack Overflow, så du kan følge det tag for at se dusinvis af lignende spørgsmål og deres svar.




  1. Sådan finder du duplikerede poster ved at bruge Group by og Having-klausulen i SQL Server - SQL Server / TSQL Tutorial Part 132

  2. hvordan bruger man et like med en join i sql?

  3. Vil PHP's sha1() og MySQL's SHA() give det samme resultat?

  4. SQL-server AlwaysOn-tilgængelighedsgrupper:Installation og konfiguration, del 2