sql >> Databasteknik >  >> RDS >> Mysql

MySQL:Visa med Subquery i FROM-klausulens begränsning

Jag hade samma problem. Jag ville skapa en vy för att visa information om det senaste året, från en tabell med poster från 2009 till 2011. Här är den ursprungliga frågan:

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

Översikt över lösning:

  1. skapa en vy för varje underfråga
  2. ersätt delfrågor med dessa vyer

Här är lösningsfrågan:

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;

Det fungerar bra på mysql 5.0.45, utan mycket av en hastighetsstraff (jämfört med att utföra den ursprungliga underfrågan utan några visningar).



  1. Ansluta till Docker MySQL-behållare från localhost?

  2. Det bästa sättet att vara värd för MySQL på Azure Cloud

  3. oracle SQL hur man tar bort tid från datum

  4. Hur man skapar och kör MySQL-lagrade funktioner och procedurer