Python で 0 から 9 (包括的) のシーケンスが必要な場合は、 xrange(0,10) を使用します。MySQLでこれを行う方法はありますか?
4 に答える
xrangeのようなものはないので、整数で保存された別のテーブルを使用するか(以前に回答したように)、ストアドプロシージャを作成してジョブを実行できます。
DROP PROCEDURE IF EXISTS xrange;
DELIMITER //
CREATE PROCEDURE xrange(x INT, y INT)
BEGIN
DECLARE i INT DEFAULT x;
CREATE TEMPORARY TABLE xrange_tmp (c1 INT);
WHILE i < y DO
INSERT INTO xrange_tmp VALUES (i);
SET i = i + 1;
END WHILE;
END;
//
使用法:
CALL xrange(-2,10);
SELECT c1 FROM xrange_tmp;
DROP TABLE xrange_tmp;
上記は、整数を使用して準備完了のテーブルを作成するよりも明らかに遅くなります。しかし、それはより柔軟です。
Python がプログラミング言語の場合、同じ Python 範囲をマップして、次の形式の INSERT ステートメントを作成できます。
INSERT INTO Table (IDCol) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9)
まさにあなたが求めたものではありませんが、MySQL ステートメントの最大長までの任意の範囲を処理する 1 行の Python コードです。
LAST_INSERT_ID() を使用して、MySQL でシーケンスをシミュレートできます。
expr が LAST_INSERT_ID() の引数として与えられた場合、引数の値は関数によって返され、LAST_INSERT_ID() によって返される次の値として記憶されます。これは、シーケンスをシミュレートするために使用できます。
シーケンス カウンターを保持するテーブルを作成し、初期化します。
CREATE TABLE sequence (id INT NOT NULL);
INSERT INTO sequence VALUES (0);
テーブルを使用して、次のようなシーケンス番号を生成します。
UPDATE sequence SET id=LAST_INSERT_ID(id+1);
SELECT LAST_INSERT_ID();
UPDATE ステートメントは、シーケンス カウンターをインクリメントし、
次に LAST_INSERT_ID() を呼び出して、更新された値を返します。SELECT ステートメントはその値を取得します。mysql_insert_id() C API 関数を使用して値を取得することもできます。セクション21.9.3.37「mysql_insert_id()」を参照してください。
整数テーブルのバリアントを試してください。これはXaprbから取得したものです。
create table integers(i int unsigned not null);
insert into integers(i) values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
select (hundreds.i * 100) + (tens.i * 10) + units.i as iii
from integers as units
cross join integers as tens
cross join integers as hundreds;
select
という名前のビューを最後に作成した場合、次のxrange999
ことが簡単にできます。
SELECT iii FROM xrange999 WHERE iii BETWEEN 0 AND 9
(もちろん、10 行のintegers
テーブルだけでそれを行うことができますが、私は 1000 の整数の方がもう少し便利だと思います。)