sql >> Database >  >> RDS >> Mysql

Geneste Select-instructie in MYSQL-join

Ik doe dit soort zoekopdrachten anders, met een exclusieve join in plaats van een subquery. U wilt de rijen van B vinden die de maximale tijd voor een bepaalde ID hebben; met andere woorden, waar geen enkele andere rij een grotere tijd en dezelfde ID heeft.

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

U kunt ook een afgeleide tabel gebruiken , die beter zou moeten presteren dan het gebruik van een gecorreleerde subquery.

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.:ik heb de greatest-n-per-group . toegevoegd label. Dit type SQL-vraag verschijnt elke week op Stack Overflow, dus je kunt die tag volgen om tientallen vergelijkbare vragen en hun antwoorden te zien.




  1. Hoe het MySQL Root-gebruikerswachtwoord opnieuw in te stellen

  2. Hoe de tekenset en sortering van een kolom in MySQL in te stellen?

  3. binaire bestandsinhoud getoond in php print_r maar niet opgeslagen in mysql

  4. Hoe een string in SQL Server te splitsen