我知道有sql查询将计数从1打印到10,如下所示:
select rownum from dual where rownum<=10;以同样的方式,我尝试在mysql中,但它抛出错误“未知列rownum In field list”。所以,如果有人给我提供mysql查询来执行同样的操作,那就太好了。提前谢谢。
发布于 2019-02-12 13:55:13
在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发布于 2019-02-12 13:51:07
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,有一些可以用于此目的的功能。)
发布于 2019-02-12 14:04:09
通过使用下面的查询,您可以得到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) Ahttps://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=1f8b71c1fef4b8e0350f2b28eb15c3be
https://stackoverflow.com/questions/54643238
复制相似问题