【发布时间】:2014-08-03 05:47:48
【问题描述】:
我很难弄清楚为什么会出现这个问题。
这段代码完全按照它应该的方式工作。它结合了两个表(MESSAGES 和 MESSAGES_ARCHIVE)并正确排序。
SELECT * FROM (
SELECT rownum as rn, a.* FROM (
SELECT
outbound.FROM_ADDR, outbound.TO_ADDR, outbound.EMAIL_SUBJECT
from MESSAGES outbound
where (1 = 1)
UNION ALL
SELECT
outboundarch.FROM_ADDR, outboundarch.TO_ADDR, outboundarch.EMAIL_SUBJECT
from MESSAGES_ARCHIVE outboundarch
where (1 = 1)
order by FROM_ADDR DESC
) a
) where rn between 1 and 25
但是,此代码不起作用。
SELECT * FROM (
SELECT rownum as rn, a.* FROM (
SELECT
outbound.FROM_ADDR, outbound.TO_ADDR, outbound.EMAIL_SUBJECT
from MESSAGES outbound
where (1 = 1)
UNION ALL
SELECT
outboundarch.FROM_ADDR, outboundarch.TO_ADDR, outboundarch.EMAIL_SUBJECT
from MESSAGES_ARCHIVE outboundarch
where (1 = 1)
order by upper(FROM_ADDR) DESC
) a
) where rn between 1 and 25
并返回此错误
ORA-01785: ORDER BY item must be the number of a SELECT-list expression
01785. 00000 - "ORDER BY item must be the number of a SELECT-list expression"
我试图让这两个表排序,无论字母大小写如何,这就是我使用upper(FROM_ADDR) 的原因。有什么建议?谢谢!
【问题讨论】:
-
使用 UNIONS(ALL) 和 DISTINCT 时,ORDER by 应使用精确选择的表达式指定或提及为 1,2.. 作为列位置。一般来说,我会相信,按不在 SELECT 中的东西排序,oracle 隐含地包含在 select 中并对其进行排序。在这种情况下,oracle 可以 not 隐含地添加 UPPER() 只是 bevauce,它必须进行 SET 操作。
标签: sql oracle sql-order-by oracle-sqldeveloper union-all