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

MySQL:Visualize com Subconsulta na Limitação da Cláusula FROM


Eu tive o mesmo problema. Eu queria criar uma view para mostrar as informações do ano mais recente, de uma tabela com registros de 2009 a 2011. Segue a 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 da solução:
  1. criar uma visualização para cada subconsulta
  2. substituir subconsultas por essas visualizações

Aqui está a consulta da solução:
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;

Ele funciona bem no mysql 5.0.45, sem muita perda de velocidade (em comparação com a execução da seleção de subconsulta original sem nenhuma visualização).