Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie generiere ich eine Sequenznummer in der MySQL-Ansicht?

Technisch gesehen möchten Sie so etwas, um eine Rangfolge oder eine Zeilennummer zu simulieren.

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  

Sie können diesen SQL-Code nicht verwenden. Sie erhalten den folgenden Fehler, wenn Sie versuchen, eine Ansicht mit einer Benutzervariablen zu erstellen.

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

Der folgende SQL-Code ermöglicht es auch, die row_number zu generieren. Dies setzt voraus, dass Sie eine ID-Spalte haben, die mit AUTO_INCREMENT generiert wird. Aber die Unterabfrage ist eine korrelierte Unterabfrage, was die Ausführung bei größeren Tabellen sehr langsam macht, da die Zählung ausgeführt werden muss auf jeder Platte.

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

Nur MySQL 8.0+.

MySQL unterstützt Fensterfunktionen, sodass keine Benutzervariablen von MySQL benötigt werden, um eine Rangfolge oder eine Zeilennummer zu simulieren.

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