不使用多个内联选择的 Oracle SQL 查询
Posted
技术标签:
【中文标题】不使用多个内联选择的 Oracle SQL 查询【英文标题】:Oracle SQL Query without using multiple inline selects 【发布时间】:2020-05-05 10:53:19 【问题描述】:环境:Oracle 12c
我有一个名为:MY_TAB 的表,其中包含以下示例数据:
CODE KEY_ID
------------ --------
2000 95
1055 96
2000 97
使用上面的示例表数据,我需要获取最小 CODE 值,在本例中为 1055 以及 KEY_ID 以及该最小 CODE 值,即 96,并在另一个查询中使用它:
select *
from another_table
where code = minimum CODE value from MY_TAB
and key_id = KEY_ID alongside the minimum CODE value
正在考虑使用这样的东西:
where code = (select min(CODE) from MY_TAB where .....) 1055
and key_id = select KEY_ID from MY_TAB for MIN(CODE) 96
不确定在没有多个嵌套内联选择的情况下处理此查询的最佳方法是什么。
【问题讨论】:
【参考方案1】:我会推荐:
select code, key_id
from my_tab
order by code
fetch first 1 row only
您可以在查询中将其用作:
where (t.code, t.key_id) in (select code, key_id
from my_tab
order by code
fetch first 1 row only
)
旧版 Oracle 中的替代方法是:
select min(code) as code,
min(key_id) keep (dense_rank first order by code) as key_id
from my_tab;
【讨论】:
查询返回正确的信息,但使用fetch first 1 row only
这将始终返回 order by code
的最小 b/c - 正确吗?
@tonyf 。 . .是的。 order by
在 fetch
之前处理。
太棒了 - 我采用了 fetch
方法,这似乎是 rownum
的替代品。以上是关于不使用多个内联选择的 Oracle SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章