Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да генерирам пореден номер в MySQL изглед?

Технически искате нещо подобно да симулира класиране или номер на ред..

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  

Не можете да използвате този SQL код, ще получите грешката по-долу, ако се опитате да създадете изглед с потребителска променлива.

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

SQL кодът по-долу също прави възможно генерирането на row_number. Това предполага, че имате id колона, която се генерира с AUTO_INCREMENT. Но подзаявката е корелирана подзаявка, което прави изпълнението много бавно на по-големи таблици, тъй като преброяването трябва да се изпълни на всеки запис.

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+.

MySQL поддържа прозоречни функции, така че не са необходими потребителски променливи на MySQL за симулиране на класиране или номер на ред.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Тип данни на MySQL DECIMAL

  2. свързване на две таблици с множество условия в релси

  3. Изключително заключване на MySQL

  4. Лоша работа whereHas в Laravel

  5. Как да свържете база данни Presto към MySQL