为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

123456qqq 2019-08-19 17:12:21

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

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

SELECT LEVEL FROM DUAL CONNECT BY LEVEL<=10


查看完整描述

3 回答

?
交互式爱情

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

Oracle

SELECT  *FROM    dualCONNECT 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    hierOPTION (MAXRECURSION 32767) -- 32767 is the maximum value of the hint

PostgreSQL

SELECT  *FROM    generate_series (1, n)

MySQL,什么都没有。


查看完整回答
反对 回复 2019-08-19
?
暮色呼如

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

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

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

SELECT  @curRow := @curRow + 1 AS row_numberFROM    sometable 
JOIN    (SELECT @curRow := 0) rWHERE   @curRow<100;

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

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


查看完整回答
反对 回复 2019-08-19
?
慕粉4167745

由于这是目前谷歌“mysql行生成器”的第一个结果之一,我将添加更新。


如果你的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开始内置它。享受!


查看完整回答
反对 回复 2019-08-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信