2

Python で 0 から 9 (包括的) のシーケンスが必要な場合は、 xrange(0,10) を使用します。MySQLでこれを行う方法はありますか?

4

4 に答える 4

2

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;

上記は、整数を使用して準備完了のテーブルを作成するよりも明らかに遅くなります。しかし、それはより柔軟です。

于 2010-03-25T09:59:26.560 に答える
0

Python がプログラミング言語の場合、同じ Python 範囲をマップして、次の形式の INSERT ステートメントを作成できます。

INSERT INTO Table (IDCol) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9)

まさにあなたが求めたものではありませんが、MySQL ステートメントの最大長までの任意の範囲を処理する 1 行の Python コードです。

于 2010-03-22T20:50:23.833 に答える
0

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()」を参照してください。

ここで詳細を読むだけでなく、それに関するいくつかの議論をここで読んでください

于 2010-03-22T20:36:49.700 に答える
0

整数テーブルのバリアントを試してください。これは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 の整数の方がもう少し便利だと思います。)

于 2010-03-22T20:41:10.000 に答える