Технически искате нещо подобно да симулира класиране или номер на ред..
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