技術的には、このようなものでランキングや行番号をシミュレートする必要があります。
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を生成することもできます。これは、AUTO_INCREMENTで生成されたid列があることを前提としています。ただし、サブクエリは相関サブクエリであるため、大きなテーブルではカウントを実行する必要があるため、実行が非常に遅くなります。すべてのレコードで。
CREATE VIEW table_view
AS
SELECT
*
, (SELECT COUNT(*) + 1 FROM table inner WHERE inner.id < outer.id) AS row_number
FROM
table outer
MySQL8.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