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

Istruzione Nested Select in MySQL join

Eseguo questo tipo di query in modo diverso, con un exclusion join invece di una sottoquery. Vuoi trovare le righe di B che hanno il tempo massimo per un determinato ID; in altre parole, dove nessun'altra riga ha un Time maggiore e lo stesso 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

Puoi anche utilizzare una tabella derivata , che dovrebbe avere prestazioni migliori rispetto all'utilizzo di una sottoquery correlata.

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.:ho aggiunto il greatest-n-per-group etichetta. Questo tipo di domanda SQL compare ogni settimana su Stack Overflow, quindi puoi seguire quel tag per vedere dozzine di domande simili e le relative risposte.