Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL :vue avec sous-requête dans la limitation de la clause FROM

J'ai eu le même problème. Je voulais créer une vue pour afficher les informations de l'année la plus récente, à partir d'un tableau avec des enregistrements de 2009 à 2011. Voici la requête d'origine :

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

Aperçu de la solution :

  1. créer une vue pour chaque sous-requête
  2. remplacer les sous-requêtes par ces vues

Voici la requête de solution :

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;

Cela fonctionne bien sur mysql 5.0.45, sans trop de pénalité de vitesse (par rapport à l'exécution de la sous-requête d'origine select sans aucune vue).