Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Instrução Select aninhada na junção MYSQL


Eu faço esse tipo de consulta de forma diferente, com uma junção de exclusão em vez de uma subconsulta. Você deseja encontrar as linhas de B que têm o tempo máximo para um determinado ID; em outras palavras, onde nenhuma outra linha tem um Time maior e o mesmo 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

Você também pode usar uma tabela derivada , que deve ter um desempenho melhor do que usar uma subconsulta correlacionada.
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.:adicionei o greatest-n-per-group marcação. Esse tipo de pergunta SQL surge toda semana no Stack Overflow, então você pode seguir essa tag para ver dezenas de perguntas semelhantes e suas respostas.