Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment générer un numéro de séquence dans la vue MySQL ?

Techniquement, vous voulez quelque chose comme ça pour simuler un classement ou un numéro de ligne..

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  

Vous ne pouvez pas utiliser ce code SQL, vous obtiendrez l'erreur ci-dessous si vous essayez de créer une vue avec une variable utilisateur.

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

Le code SQL ci-dessous permet également de générer le row_number.Cela suppose que vous avez une colonne id ce qui est généré avec AUTO_INCREMENT.Mais la sous-requête est une sous-requête corrélée ce qui rend l'exécution très lente sur des tables plus grandes car le comptage doit être exécuté sur chaque enregistrement.

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

MySQL 8.0+ uniquement.

MySQL prend en charge les fonctions de fenêtre, de sorte qu'aucune variable utilisateur de MySQL n'est nécessaire pour simuler un classement ou un numéro de ligne.

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