sql >> Database >  >> RDS >> Mysql

MySQL:weergave met subquery in de FROM-clausulebeperking

Ik had hetzelfde probleem. Ik wilde een weergave maken om informatie van het meest recente jaar weer te geven, uit een tabel met records van 2009 tot 2011. Dit is de oorspronkelijke vraag:

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

Overzicht van oplossing:

  1. maak een weergave voor elke subquery
  2. vervang subquery's door die weergaven

Hier is de vraag naar de oplossing:

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;

Het werkt prima op mysql 5.0.45, zonder veel snelheidsboetes (vergeleken met het uitvoeren van de originele subquery-selectie zonder weergaven).



  1. Overlappende beperking voor datums na gres

  2. Converteer 'smalldatetime' naar 'datetimeoffset' in SQL Server (T-SQL-voorbeelden)

  3. pyodbc.connect() werkt, maar niet sqlalchemy.create_engine().connect()

  4. SQL Sentry is nu SentryOne