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

MySQL:vista con subconsulta en la cláusula FROM Limitación

Yo tuve el mismo problema. Quería crear una vista para mostrar información del año más reciente, a partir de una tabla con registros de 2009 a 2011. Esta es la consulta original:

SELECT a.* 
FROM a 
JOIN ( 
  SELECT a.alias, MAX(a.year) as max_year 
  FROM a 
  GROUP BY a.alias
) b 
ON a.alias=b.alias and a.year=b.max_year

Esquema de la solución:

  1. crear una vista para cada subconsulta
  2. reemplazar subconsultas con esas vistas

Aquí está la consulta de solución:

CREATE VIEW v_max_year AS 
  SELECT alias, MAX(year) as max_year 
  FROM a 
  GROUP BY a.alias;

CREATE VIEW v_latest_info AS 
  SELECT a.* 
  FROM a 
  JOIN v_max_year b 
  ON a.alias=b.alias and a.year=b.max_year;

Funciona bien en mysql 5.0.45, sin una gran penalización de velocidad (en comparación con ejecutar la selección de subconsulta original sin ninguna vista).