我需要知道Oracle等效的mySQL Server查询。有人可以帮助我吗?
select recno = (select top 1 ld.recno from load ld where ld.crecno = i.recno)
from inputtable i
答案 0 :(得分:1)
检查以下查询
select (select ld.recno from load ld where ld.crecno = i.recno AND RowNum =1)
AS recno from inputtable i
答案 1 :(得分:1)
你写的SUBQUERY
没有必要。 INNER JOIN
和LOAD
表之间的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)
行为。