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

Come generare il numero di sequenza nella vista MySQL?

Tecnicamente vuoi qualcosa del genere per simulare la classifica o un numero di riga..

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  

Non è possibile utilizzare questo codice SQL, verrà visualizzato l'errore di seguito se si tenta di creare una vista con una variabile utente.

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

Il codice SQL seguente consente anche di generare il numero_riga. Ciò presuppone che tu abbia una colonna id generata con AUTO_INCREMENT. Ma la sottoquery è una sottoquery correlata che rende l'esecuzione molto lenta su tabelle più grandi perché il conteggio deve essere eseguito su ogni record.

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

Solo MySQL 8.0+.

MySQL supporta le funzioni della finestra, quindi non sono necessarie variabili utente di MySQL per simulare il ranking o un numero di riga.

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