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

MySQL:Vis med underforespørgsel i FROM-klausulens begrænsning

Jeg havde samme problem. Jeg ønskede at oprette en visning for at vise oplysninger fra det seneste år fra en tabel med poster fra 2009 til 2011. Her er den oprindelige forespørgsel:

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

Oversigt over løsning:

  1. opret en visning for hver underforespørgsel
  2. erstat underforespørgsler med disse visninger

Her er løsningsforespørgslen:

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 fungerer fint på mysql 5.0.45, uden meget af en hastighedsstraf (sammenlignet med at udføre den oprindelige underforespørgsel uden nogen visninger).



  1. 2017 @ Severalnines:Vi fejrer vores kundehistorier

  2. Hvornår vælger du opdateringslås og oplåsning?

  3. Er der en Oracle SQL-forespørgsel, der samler flere rækker i én række?

  4. Sørg for, at markøren er initialiseret korrekt, før du får adgang til data fra den