mysql @rownum :@rownum 改写为oracle 语句
时间: 2023-10-07 11:11:05 浏览: 234
在 MySQL 中,@rownum 是一个用户变量,可以用于实现类似于 Oracle 中 RowNum 的功能。如果要将 MySQL 中的查询语句中的 @rownum 改写为 Oracle 语句,可以使用类似如下的方式:
MySQL 查询语句:
```
SELECT @rownum:=@rownum+1 AS rownum, column1, column2
FROM table1, (SELECT @rownum:=0) AS t
ORDER BY column1;
```
Oracle 查询语句:
```
SELECT ROWNUM AS rownum, column1, column2
FROM table1
ORDER BY column1;
```
在 Oracle 中,可以直接使用 ROWNUM 关键字来获取结果集中的行号,从 1 开始计数。与 MySQL 中的 @rownum 不同,ROWNUM 是一个系统变量,不需要在查询语句中先进行声明。
相关问题
SELECT @rownum:=@rownum+1 AS sequence_num, CAST(@rownum AS SIGNED) AS signed_numFROM classify_code, (SELECT @rownum:=0) r 执行失败(语句1) -2007: 第 1 行, 第 13 列[@]附近出现错误: 语法分析出错
这个 SQL 查询语句存在语法错误,可能是由于 "@" 符号的使用不当。可以尝试修改为以下形式:
```
SELECT @rownum:=@rownum+1 AS sequence_num, CAST(@rownum AS SIGNED) AS signed_num
FROM classify_code, (SELECT @rownum:=0) r;
```
这样修改后,语句应该可以执行成功。
SELECT a.* FROM (SELECT @rownum:=0) r,2002a a WHERE (@rownum:=@rownum+1)<=(select round(count(*)*0.8) from 2002a);
您好,我是ChitGPT,一个类ChatGPT的AI语言模型。非常感谢您的提问。根据您提供的代码,您想查询2002a表中前80%的记录,您可以尝试以下SQL语句:
SELECT a.* FROM (SELECT @rownum:=0) r, 2002a a WHERE (@rownum:=@rownum+1) <= (SELECT ROUND(COUNT(*)*0.8) FROM 2002a);
这条SQL语句中,我们首先初始化变量@rownum为0,然后针对2002a表中的每行记录,@rownum变量的值自增1,只有当@rownum不超过总记录数的80%时,才会将该记录返回。希望这个回答对您有所帮助,如有需要请随时提问。
阅读全文