sql >> Database >  >> RDS >> Mysql

Hoe een volgnummer te genereren in de MySQL-weergave?

Technisch gezien wil je zoiets om een ​​rangorde of een rijnummer te simuleren.

CREATE VIEW table_view 
AS
 SELECT
  *
  , (@row_number := @row_number + 1) AS row_number 
 FROM 
  table
 # Because a SQL table is a unsorted set off data ORDER BY is needed to get stabile ordered results.
 ORDER BY
  table.column ASC 
CROSS JOIN (SELECT @row_number := 0) AS init_user_var  

U kunt deze SQL-code niet gebruiken, u krijgt de onderstaande foutmelding als u een View probeert te maken met een gebruikersvariabele.

Error Code: 1351
View's SELECT contains a variable or parameter

De onderstaande SQL-code maakt het ook mogelijk om het rijnummer te genereren. Dit veronderstelt dat je een id-kolom hebt die wordt gegenereerd met AUTO_INCREMENT. Maar de subquery is een gecorreleerde subquery wat de uitvoering erg traag maakt op grotere tabellen omdat het tellen moet worden uitgevoerd op elke plaat.

CREATE VIEW table_view
AS
 SELECT 
  *
  , (SELECT COUNT(*) + 1 FROM table inner WHERE inner.id < outer.id) AS row_number
 FROM 
   table outer

Alleen MySQL 8.0+.

MySQL ondersteunt vensterfuncties, dus er zijn geen gebruikersvariabelen van MySQL nodig om een ​​rangorde of een rijnummer te simuleren.

CREATE VIEW table_view 
AS
 SELECT
  *
 # Because a SQL table is a unsorted set off data ORDER BY is needed to get stabile ordered results.
  , (ROW_NUMBER() OVER (ORDER BY table.column ASC)) AS row_number
 FROM 
  table


  1. Beperk PostgreSQL-gebruikerstoegang met behulp van schema en weergaven

  2. Libmysqlclient gebruiken in een toepassing met meerdere threads

  3. Prestatieverrassingen en aannames:STRING_SPLIT()

  4. Hoe ORD() werkt in MariaDB