Oracle相当于一个SQL Server查询

时间:2014-04-15 16:13:49

标签: sql-server oracle oracle11g sql-server-2012

我需要知道Oracle等效的mySQL Server查询。有人可以帮助我吗?

select recno = (select top 1 ld.recno from load ld where ld.crecno = i.recno) 
from inputtable i

2 个答案:

答案 0 :(得分:1)

检查以下查询

select (select  ld.recno from load ld where ld.crecno = i.recno AND RowNum =1)
AS recno  from inputtable i

答案 1 :(得分:1)

将TOP(N)T-SQL语法转换为Oracle兼容SQL

你写的SUBQUERY没有必要。 INNER JOINLOAD表之间的INPUTTABLE操作是获取您正在寻找的集合的快捷方式。

  

SQL语法解释:LOAD中的所有记录中,有多少具有值CRECNO的记录在表RECNO列中具有匹配值INPUTTABLE?得到这些结果,如果结果按......(?)排序,输出中的FIRST值(TOP(1))是什么......

OP中没有指定任何SORT优先级。

  

在SELECT语句中,始终使用带有TOP子句的ORDER BY子句。这是可预测地指示哪些行受TOP影响的唯一方法。 Reference From: Microsoft Technet

为了说明具有可重复结果的格式正确的SQL语句,我继续重写OP的SQL查询,假设TOP(n)解决方案想要RECNO列值的ASCENDING SORT中的第一个值。

如果缺少诸如ORDER BY语句之类的重要表达式,数据库服务器确实具有默认排序和选择行为,但是假设在任何给定环境中所有默认值都设置为相同,则存在风险。

重写的SQL:

WITH sub_query AS (
     SELECT i.recno
       FROM inputtable i, load ld
      WHERE i.recno = ld.crecno
      ORDER BY i.recno ASC
     )
     SELECT s.recno
       FROM sub_query s
      WHERE rownum = 1
  

可以更改ROWNUM评估和ORDER BY条件,以获得预期的TOP(n)行为。