加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL SELECT获取前N个正整数

发布时间:2020-12-12 16:43:12 所属栏目:MsSql教程 来源:网络整理
导读:我需要得到一个包含前N个正整数的结果集.是否可以使用标准SQL SELECT语句来获取它们(没有提供任何计数表)? 如果不可能,有什么具体的MySQL方式可以实现吗? 解决方法 似乎你想要的是一个虚拟行集. 在MySQL中,如果没有表,这是不可能的. 大多数主要系统提供了一
我需要得到一个包含前N个正整数的结果集.是否可以使用标准SQL SELECT语句来获取它们(没有提供任何计数表)?

如果不可能,有什么具体的MySQL方式可以实现吗?

解决方法

似乎你想要的是一个虚拟行集.

在MySQL中,如果没有表,这是不可能的.

大多数主要系统提供了一种方法:

>在Oracle中:

SELECT  level
FROM    dual
CONNECT BY
        level <= 10

>在SQL Server中:

WITH    q AS
        (
        SELECT  1 AS num
        UNION ALL
        SELECT  num + 1
        FROM    q
        WHERE   num < 10
        )
SELECT  *
FROM    q

>在PostgreSQL中:

SELECT  num
FROM    generate_series(1,10) num

MySQL缺少这样的东西,这是一个严重的缺点.

我写了一个简单的脚本来为我的博客文章中的示例表生成测试数据,也许这将是有用的:

CREATE TABLE filler (
        id INT NOT NULL PRIMARY KEY AUTO_INCREMENT
) ENGINE=Memory;

CREATE PROCEDURE prc_filler(cnt INT)
BEGIN
        DECLARE _cnt INT;
        SET _cnt = 1;
        WHILE _cnt <= cnt DO
                INSERT
                INTO    filler
                SELECT  _cnt;
                SET _cnt = _cnt + 1;
        END WHILE;
END
$$

你调用过程,表中的数字被填满.

您可以在会话期间重复使用它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读