不使用多个内联选择的 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 byfetch 之前处理。 太棒了 - 我采用了 fetch 方法,这似乎是 rownum 的替代品。

以上是关于不使用多个内联选择的 Oracle SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何编写涉及多个选择的 Oracle SQL 查询

Oracle 18C新特性:内联外部表

是否可以在同一个文件中的多个不相关查询上使用 Oracle sql WITH CLAUSE?

Tableau技巧——模糊查询

Oracle SQL查询选择[关闭]

内联T-SQL或子查询