gpt4 book ai didi

sql - Oracle SQL命令在子查询中的问题!

转载 作者:行者123 更新时间:2023-12-03 21:02:14 25 4
gpt4 key购买 nike

我试图在Oracle SQL中运行子查询,但不会让我订购子查询列。排序子查询很重要,因为Oracle似乎可以随意选择返回的哪些列返回主查询。

select ps.id, ps.created_date, pst.last_updated, pst.from_state, pst.to_state,
(select last_updated from mwcrm.process_state_transition subpst
where subpst.last_updated > pst.last_updated
and subpst.process_state = ps.id
and rownum = 1) as next_response
from mwcrm.process_state ps, mwcrm.process_state_transition pst
where ps.created_date > sysdate - 1/24
and ps.id=pst.process_state
order by ps.id asc


确实应该是:

select ps.id, ps.created_date, pst.last_updated, pst.from_state, pst.to_state,
(select last_updated from mwcrm.process_state_transition subpst
where subpst.last_updated > pst.last_updated
and subpst.process_state = ps.id
and rownum = 1
order by subpst.last_updated asc) as next_response
from mwcrm.process_state ps, mwcrm.process_state_transition pst
where ps.created_date > sysdate - 1/24
and ps.id=pst.process_state
order by ps.id asc

最佳答案

实际上,“排序”仅在最外部的查询上有意义-如果您在子查询中进行排序,则允许外部查询随意对结果进行加扰,因此子查询的排序实际上不执行任何操作。

看起来您只想获取大于pst.last_updated的最小last_updated-当您将其视为最小值(总计)而不是第一行(而不是第一行)时会更容易(这会带来其他问题,例如有两行用于next_response?)

试一下。合理的警告,自从我开始使用Oracle已有数年了,而且我不习惯使用subquery-as-a-column语法;如果炸毁了,我将在from子句中对其进行版本化。

select
ps.id, ps.created_date, pst.last_updated, pst.from_state, pst.to_state,
( select min(last_updated)
from mwcrm.process_state_transition subpst
where subpst.last_updated > pst.last_updated
and subpst.process_state = ps.id) as next_response
from <the rest>

关于sql - Oracle SQL命令在子查询中的问题!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5119190/

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