gpt4 book ai didi

sql - ORDER BY upper(...) 和 UNION 给我带来了问题

转载 作者:行者123 更新时间:2023-12-02 11:19:59 27 4
gpt4 key购买 nike

我很难弄清楚为什么会出现这个问题。

这段代码完全按照它应该的方式工作。它组合了两个表(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) 的原因。有什么建议么?谢谢!

最佳答案

我不太确定为什么会产生错误,但它可能与 union 查询的范围规则有关。有一个简单的解决方法,使用 row_number():

SELECT * FROM ( 
SELECT row_number() over (order by upper(FROM_ADDR)) 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)

) a
)
where rn between 1 and 25

关于sql - ORDER BY upper(...) 和 UNION 给我带来了问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24192247/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com