我需要获取一个包含前N个正整数的结果集。是否可以仅使用标准SQL SELECT语句来获取它们(不提供任何计数表)?
如果不可能,是否有任何特定的MySQL方法来实现?
似乎您想要的是一个dummy rowset。
dummy rowset
在中MySQL,没有表是不可能的。
MySQL
大多数主要系统都提供了一种实现方法:
在Oracle:
Oracle
SELECT level
FROM dual CONNECT BY level <= 10
在SQL Server:
SQL Server
WITH q AS ( SELECT 1 AS num UNION ALL SELECT num + 1 FROM q WHERE num < 10 )
SELECT * FROM q
在PostgreSQL:
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 $$
您调用该过程,表格将被数字填充。
您可以在会话期间重用它。