【MySQL】ユーザ変数を使って連番や、連続日付を取得する方法について
仕事の中で連番のみの仮想的なテーブルがほしい場合があったので、調べてみたところ、その解決方法としてユーザ変数を使って
SQL文1個でできる様なので、その件を記します。
SQL文は以下の様に、2個のSELECT文をUNIONで連結しています。 最初のSELECT文でユーザ変数 @num を初期化し、2個目のSELECT文で @num を順次1加算し、表示することになります。 さらに LIMIT句 で何個までを生成するのかを指定します。
ただ、FROM句には実際のテーブルが必要ですので、あらかじめ TEST と命名したテーブルを作成しておきました。 TEST の中身はなんでもいいのですが、とにかく欲しい連番までのレコード(行)が必要です。
なるべくレコード数が多い方がいいのですが、特別に TEST などというテーブルを作成しなくても MySQLインストール時に生成されるシステムDBのテーブルを使ってもできます。
いろんな方のサイトを見ると、`information_schema`.COLUMNS を使っているのを多く見かけます。 実際このテーブルのレコード数は10万件以上ありますので、これを使うのがいいのではと思います。
実行結果は以下の様になります。
また、この方法を応用して、連続日付の生成を行います。以下のSQLを見て下さい。 @num の部分を @dat として日付発生させるように変更しています。
実行結果は以下の様になります。
■関連記事
⇒【MySQL】ダミーテーブルをUNIONで連結してコード表を作成する方法
⇒【MySQL】ユーザー変数を使ってSELECTに行番号を付加する方法
⇒【MySQL】カラム名を囲むバッククオートについて
⇒【MySQL】UNIONMINUSが無いので、代わりにNOTEXISTSを使う方法について
⇒【MySQL】ユーザ変数を使って連番や、連続日付を取得する方法について
SQL文は以下の様に、2個のSELECT文をUNIONで連結しています。 最初のSELECT文でユーザ変数 @num を初期化し、2個目のSELECT文で @num を順次1加算し、表示することになります。 さらに LIMIT句 で何個までを生成するのかを指定します。
ただ、FROM句には実際のテーブルが必要ですので、あらかじめ TEST と命名したテーブルを作成しておきました。 TEST の中身はなんでもいいのですが、とにかく欲しい連番までのレコード(行)が必要です。
なるべくレコード数が多い方がいいのですが、特別に TEST などというテーブルを作成しなくても MySQLインストール時に生成されるシステムDBのテーブルを使ってもできます。
いろんな方のサイトを見ると、`information_schema`.COLUMNS を使っているのを多く見かけます。 実際このテーブルのレコード数は10万件以上ありますので、これを使うのがいいのではと思います。
実行結果は以下の様になります。
また、この方法を応用して、連続日付の生成を行います。以下のSQLを見て下さい。 @num の部分を @dat として日付発生させるように変更しています。
実行結果は以下の様になります。
■関連記事
⇒【MySQL】ダミーテーブルをUNIONで連結してコード表を作成する方法
⇒【MySQL】ユーザー変数を使ってSELECTに行番号を付加する方法
⇒【MySQL】カラム名を囲むバッククオートについて
⇒【MySQL】UNIONMINUSが無いので、代わりにNOTEXISTSを使う方法について
⇒【MySQL】ユーザ変数を使って連番や、連続日付を取得する方法について
コメント