Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:Ansicht mit Unterabfrage in der Einschränkung der FROM-Klausel

Ich hatte das gleiche Problem. Ich wollte eine Ansicht erstellen, um Informationen des letzten Jahres aus einer Tabelle mit Datensätzen von 2009 bis 2011 anzuzeigen. Hier ist die ursprüngliche Abfrage:

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

Lösungskonzept:

  1. eine Ansicht für jede Unterabfrage erstellen
  2. Unterabfragen durch diese Ansichten ersetzen

Hier ist die Lösungsabfrage:

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;

Es funktioniert gut auf mysql 5.0.45, ohne große Geschwindigkeitseinbußen (im Vergleich zur Ausführung der ursprünglichen Unterabfrage select ohne Views).