sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo generar un número de secuencia en la vista MySQL?

Técnicamente, desea algo como esto para simular una clasificación o un número de fila.

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  

No puede usar este código SQL, obtendrá el siguiente error si intenta crear una vista con una variable de usuario.

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

El siguiente código SQL también permite generar el número de fila. Esto supone que tiene una columna de identificación que se genera con AUTO_INCREMENT. Pero la subconsulta es una subconsulta correlacionada que hace que la ejecución sea muy lenta en tablas más grandes porque es necesario ejecutar el conteo. en cada registro.

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 admite funciones de ventana, por lo que no se necesitan variables de usuario de MySQL para simular una clasificación o un número de fila.

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