我有一个带有主键 MY_PK 的表 MY_TABLE。然后,我有一个有序主键列表,例如(17,13,35,2,9)。
现在我想检索具有这些主键的所有行,并以与给定键列表相同的方式保持行的顺序。
我最初做的是:
SELECT * FROM MY_TABLE WHERE MY_PK IN (:my_list)
但是返回的行的顺序是随机的,并且不再对应于给定键的顺序。有办法实现吗?
我唯一想到的就是制作许多 SELECT 语句并将它们与 UNION 连接起来,但我的主键列表可能很长并且包含数百甚至数千个键。我想到的替代方案是稍后在应用程序中对行进行重新排序,但我更喜欢不需要这样做的解决方案。
首先,与工会一起做这件事不一定有帮助。不保证结果集中行的顺序除非你有一个order by
clause.
这是一种解决方案,尽管它不太优雅:
with keys as (
select 1 as ordering, 17 as pk from dual union all
select 2 as ordering, 13 as pk from dual union all
select 3 as ordering, 35 as pk from dual union all
select 4 as ordering, 2 as pk from dual union all
select 5 as ordering, 9 as pk from dual
)
select mt.*
from My_Table mt join
keys
on mt.my_pk = keys.pk
order by keys.ordering
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)