【发布时间】:2014-10-08 16:05:59
【问题描述】:
我需要使用 order by 和 rownum 构建查询,但不使用 sublect。 需要对查询的第一行进行排序。
换句话说,我想要的结果
select * from (
SELECT CAMP1,ORDERCAMP
FROM TABLENAME
ORDER BY ORDERCAMP) where rownum=1;
但不使用子选择。有可能吗?
我有一个 Oracle 11。你可以说这是我的全部查询:
SELECT T1.CAMP_ID,
T2.CAMP
(SELECT OT.CAMP
FROM OTHERTABLE OT
WHERE OT.FK_TO_TABLE1=T1.CAMP_ID
ORDER BY OT.ORDERCAMP
)
FROM TABLE1 T1,
TABLE2 T2
WHERE T1.FK_TO_T2=T2.PK;
子查询返回多行,我不能使用另一个子查询,例如
SELECT T1.CAMP_ID,
T2.CAMP
(SELECT *
FROM
(SELECT OT.CAMP
FROM OTHERTABLE OT
WHERE OT.FK_TO_TABLE1=T1.CAMP_ID
ORDER BY OT.ORDERCAMP
)
WHERE ROWNUM=1
)
FROM TABLE1 T1,
TABLE2 T2
WHERE T1.FK_TO_T2=T2.PK;
SELECT CAMP1,ORDERCAMP FROM TABLE2 ORDER BY ORDERCAMP
因为T1.CAMP_ID 在第三级子查询中是无效标识符。
我希望我已经对自己进行了足够的解释。
【问题讨论】:
-
您使用的是哪个版本?为什么不想使用子查询?这是您正在使用的工具的练习还是限制?出于您的目的,CTE 是否算作子查询?
-
嗨,我有一个 Oracle 11。我不能使用子查询,因为这个选择已经是一个子选择
-
您可以嵌套子查询,除非您有一个连接条件或过滤器引用了链上太远的东西。在不完全了解您要解决的问题的情况下(最好使用可重现的示例),很难提出合适的解决方案。简短的回答是你不能,所以你需要一种不同的方法。
-
嗨,Alex,我们可以说这是我的完整查询:
SELECT T1.CAMP_ID, T2.CAMP (SELECT OT.CAMP FROM OTHERTABLE OT WHERE OT.FK_TO_TABLE1=T1.CAMP_ID ORDER BY OT.ORDERCAMP) FROM TABLE1 T1, TABLE2 T2 WHERE T1.FK_TO_T2=T2.PK;子查询返回多于 1 行,这就是为什么我只想恢复第一行 -
@AlexPoole 我已编辑问题以添加更多信息
标签: sql oracle sql-order-by rownum