什么是mysql查询打印1到10?

时间:2019-02-12 05:14:00

标签: mysql

我知道有一个sql查询要打印从1到10的计数,如下所示:

select rownum from dual where rownum<=10;

我以同样的方式在mysql中尝试,但是它抛出错误“字段列表中的未知列rownum”。因此,如果有人向我提供mysql查询以执行相同的操作,那将是很好的。提前致谢。

4 个答案:

答案 0 :(得分:1)

在MySQL 8+中,您可以使用递归CTE来做到这一点:

WITH RECURSIVE cte AS (
    SELECT 1 AS n
    UNION ALL
    SELECT n + 1 FROM cte WHERE n < 10
)
SELECT n FROM cte

输出:

n
1
2
3
4
5
6
7
8
9
10

Demo on dbfiddle

答案 1 :(得分:0)

There is no straightforward way to do this in MySQL.

MySQL不完全支持DUAL表。在某些不需要表的查询中,它可以用作占位符表,但是它的行为与其他数据库服务器中的DUAL表不同-即使返回,也只会返回一行请求更多行:

mysql> SELECT ROW_NUMBER() OVER() FROM DUAL LIMIT 10;
+---------------------+
| row_number() over() |
+---------------------+
|                   1 |
+---------------------+

mysql> SELECT ROW_NUMBER() OVER() FROM DUAL WHERE ROW_NUMBER() OVER() < 10;
ERROR 3593 (HY000): You cannot use the window function 'row_number' in this context.'

(是的,该错误消息的末尾确实有一个撇号。)

创建序列有一种非常愚蠢的方法:

mysql> SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5;
+---+
| 1 |
+---+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+---+
5 rows in set (0.00 sec)

很显然,这对于大型序列来说很难处理,但这是最好的库存MySQL。 (有些分叉,例如MariaDB,具有一些可用于此的功能。)

答案 2 :(得分:0)

通过使用以下查询,您可以获得1到10。

10个数字的顺序

select * from (select 1 x union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10) A

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=1f8b71c1fef4b8e0350f2b28eb15c3be

答案 3 :(得分:0)

使用table函数(只为当前查询创建临时表的方法):像numbers函数,会打印1到10: SELECT * FROM numbers(1, 10);