【发布时间】:2014-05-30 03:03:06
【问题描述】:
我需要知道我的 SQL Sever 查询的 Oracle 等效项。有人可以帮帮我吗?
select recno = (select top 1 ld.recno from load ld where ld.crecno = i.recno)
from inputtable i
【问题讨论】:
标签: sql-server oracle oracle11g sql-server-2012
我需要知道我的 SQL Sever 查询的 Oracle 等效项。有人可以帮帮我吗?
select recno = (select top 1 ld.recno from load ld where ld.crecno = i.recno)
from inputtable i
【问题讨论】:
标签: sql-server oracle oracle11g sql-server-2012
您写的SUBQUERY 不是必需的。 LOAD 和 INPUTTABLE 表之间的 INNER JOIN 操作是获取所需集合的快速方法。
SQL 语法解释: 在
LOAD中的所有记录中,有多少值为CRECNO的记录在表INPUTTABLE的列RECNO中有匹配值?取这些结果,如果结果按...(?)...排序,输出中的第一个值(TOP(1))是什么?
OP 中没有指定任何SORT 优先级。
在 SELECT 语句中,始终将 ORDER BY 子句与 TOP 子句一起使用。这是可预测地指示哪些行受 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)行为。
【讨论】:
检查下面的查询
select (select ld.recno from load ld where ld.crecno = i.recno AND RowNum =1)
AS recno from inputtable i
【讨论】: