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を生成することもできます。これは、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
    


    1. PHP-MySQLデータからネストされた配列を作成します

    2. 重複エントリのエラーを処理するにはどうすればよいですか?

    3. CMONHAを使用したClusterControlノードの高可用性構成

    4. MySqlとEntityFramework4.1コードを最初に使用する方法