当前位置:  开发笔记 > 编程语言 > 正文

如何在MySQL中创建行生成器?

如何解决《如何在MySQL中创建行生成器?》经验,为你挑选了3个好方法。

有没有办法生成可以在JOIN中使用的任意数量的行,类似于Oracle语法:

SELECT LEVEL FROM DUAL CONNECT BY LEVEL<=10

Quassnoi.. 25

讨厌这样说,但是没有这个功能的四巨头中MySQL唯一RDBMS.

Oracle:

SELECT  *
FROM    dual
CONNECT BY
        level < n

MS SQL(最多100行):

WITH hier(row) AS
        (
        SELECT  1
        UNION ALL
        SELECT  row + 1
        FROM    hier
        WHERE   row < n
        )
SELECT  *
FROM    hier

或使用提示 32768

WITH hier(row) AS
        (
        SELECT  1
        UNION ALL
        SELECT  row + 1
        FROM    hier
        WHERE   row < 32768
        )
SELECT  *
FROM    hier
OPTION (MAXRECURSION 32767) -- 32767 is the maximum value of the hint

PostgreSQL:

SELECT  *
FROM    generate_series (1, n)

MySQL,什么都没有.



1> Quassnoi..:

讨厌这样说,但是没有这个功能的四巨头中MySQL唯一RDBMS.

Oracle:

SELECT  *
FROM    dual
CONNECT BY
        level < n

MS SQL(最多100行):

WITH hier(row) AS
        (
        SELECT  1
        UNION ALL
        SELECT  row + 1
        FROM    hier
        WHERE   row < n
        )
SELECT  *
FROM    hier

或使用提示 32768

WITH hier(row) AS
        (
        SELECT  1
        UNION ALL
        SELECT  row + 1
        FROM    hier
        WHERE   row < 32768
        )
SELECT  *
FROM    hier
OPTION (MAXRECURSION 32767) -- 32767 is the maximum value of the hint

PostgreSQL:

SELECT  *
FROM    generate_series (1, n)

MySQL,什么都没有.


Reg MySQL:希望能填补这一空白:http://use-the-index-luke.com/blog/2011-07-30/mysql-row-generator#mysql_generator_code

2> DrDave..:

在MySql中,我理解你可以使用没有表(或DUAL)的SELECT获得多行.

因此,为了得到多行,你需要至少所需的行数的真实的或临时表.

但是,您不需要构建临时表,因为您可以使用至少具有所需行数的任何现有表.因此,如果您的表至少具有所需的行数,请使用:

SELECT  @curRow := @curRow + 1 AS row_number
FROM    sometable 
JOIN    (SELECT @curRow := 0) r
WHERE   @curRow<100;

只需将"sometable"替换为您的任何表的名称,并至少包含所需的行数.

PS:"r"是表"别名":我本可以使用"AS r".FROM或JOIN子句中的任何子查询都会创建一个"派生表",与所有表一样,它必须具有名称或别名.(参见MySql手册:13.2.9.8.FOM子句中的子查询)



3> Vilx-..:

由于这是Google目前“ mysql row generator”的首批结果之一,因此我将添加一个更新。

如果您的MySQL碰巧是MariaDB,则它们具有此功能。它被称为“序列存储引擎”,其用法如下:

select * from seq_1_to_10;

结果:

+-----+
| seq |
+-----+
|   1 |
|   2 |
|   3 |
|   4 |
|   5 |
|   6 |
|   7 |
|   8 |
|   9 |
|  10 |
+-----+
10 rows in set (0.00 sec)

在10.0版之前,它是一个单独的插件,需要明确安装,但是从10.0版开始,它是内置的。

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有