Oracle SQL 不使用多个内联选择的查询
Oracle SQL Query without using multiple inline selects
环境:Oracle 12c
我有一个名为 table 的 MY_TAB,示例数据如下:
CODE KEY_ID
------------ --------
2000 95
1055 96
2000 97
使用上面的示例 table 数据,我需要取最小 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
不确定在没有多个嵌套内联选择的情况下处理此查询的最佳方法。
我会推荐:
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;
环境:Oracle 12c
我有一个名为 table 的 MY_TAB,示例数据如下:
CODE KEY_ID
------------ --------
2000 95
1055 96
2000 97
使用上面的示例 table 数据,我需要取最小 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
不确定在没有多个嵌套内联选择的情况下处理此查询的最佳方法。
我会推荐:
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;