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

MySQL:Visualizza con subquery nella clausola FROM

Ho avuto lo stesso problema. Volevo creare una vista per mostrare le informazioni dell'anno più recente, da una tabella con i record dal 2009 al 2011. Ecco la query originale:

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

Schema di soluzione:

  1. crea una vista per ogni sottoquery
  2. sostituisci le sottoquery con quelle viste

Ecco la domanda di soluzione:

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;

Funziona bene su MySQL 5.0.45, senza una penalità di velocità (rispetto all'esecuzione della selezione della sottoquery originale senza alcuna visualizzazione).