【问题标题】:Oracle SQL Query without using multiple inline selects不使用多个内联选择的 Oracle SQL 查询
【发布时间】: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

不确定在没有多个嵌套内联选择的情况下处理此查询的最佳方法是什么。

【问题讨论】:

    标签: sql oracle oracle12c


    【解决方案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 的替代品。
    猜你喜欢
    • 1970-01-01
    • 2013-07-17
    • 2020-09-15
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    相关资源
    最近更新 更多