我知道有一个sql查询要打印从1到10的计数,如下所示:
select rownum from dual where rownum<=10;
我以同样的方式在mysql中尝试,但是它抛出错误“字段列表中的未知列rownum”。因此,如果有人向我提供mysql查询以执行相同的操作,那将是很好的。提前致谢。
答案 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
答案 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);