sql >> Base de Datos >  >> RDS >> Mysql

Declaración de selección anidada en la combinación MYSQL

Hago este tipo de consulta de manera diferente, con una unión de exclusión en lugar de una subconsulta. Desea encontrar las filas de B que tienen el tiempo máximo para una identificación determinada; es decir, donde ninguna otra fila tiene mayor Tiempo y el mismo 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

También puede usar una tabla derivada , que debería funcionar mejor que usar una 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.D.:he añadido el greatest-n-per-group etiqueta. Este tipo de pregunta de SQL aparece todas las semanas en Stack Overflow, por lo que puede seguir esa etiqueta para ver docenas de preguntas similares y sus respuestas.