在Oracle中,给出了一个由connect by提供支持的分层视图V,它可以表示一个已经按某种逻辑对同级进行排序的分层查询。
如果对V执行查询,如下所示:
select * from V where key_column in (any subquery may return key_columns in a different order)我们如何在视图V中保持原始顺序?
我知道我可以添加一个rownum列到视图中,然后按它排序,但是我在sql中寻找一个方法,我不想改变视图的结构。
视图:
CREATE or replace VIEW
CWE_DICT_TREE_VIEW
AS
SELECT
SUBSTR (SYS_CONNECT_BY_PATH (a.node_id, '.'), 2) AS id_path,
SUBSTR (SYS_CONNECT_BY_PATH (a.entry_key, '.'), 2) AS key_path,
getdictname(parent_node) AS parent_entry_value,
LEVEL AS node_level,
CONNECT_BY_ISLEAF AS node_is_leaf,
a.*
FROM
cwe_dict a START WITH a.parent_node IS NULL CONNECT BY PRIOR a.node_id = a.parent_node ORDER
SIBLINGS BY a.inline_sort_no;查询:
select NODE_ID , PARENT_NODE , ENTRY_VALUE , NODE_IS_LEAF , INLINE_SORT_NO , NODE_LEVEL , ENTRY_KEY
from CWE_DICT_TREE_VIEW where NODE_ID in (
with link(NODE_ID,PARENT_NODE) AS (
select NODE_ID,PARENT_NODE from CWE_DICT_TREE_VIEW WHERE ( ENTRY_VALUE like '%农%') or( ENTRY_KEY like '%农%' )
union all
select P2.NODE_ID, P2.PARENT_NODE from LINK P1 inner join CWE_DICT_TREE_VIEW P2 on P2.NODE_ID = P1.PARENT_NODE
)
select distinct NODE_ID from LINK
)发布于 2017-12-22 10:20:49
如何才能保持视图V中的原始顺序?
您对表和关系数据库有很深的误解。表表示无序集合。表中没有“原始顺序”。唯一的排序是您在查询中指定的排序。
表通常具有提供“自然排序”的"id“类型的主键。只需在order by中包含此列即可。假设它是key_column
select *
from V
where key_column in (any subquery may return key_columns in a different order)
order by key_column;https://stackoverflow.com/questions/47934976
复制相似问题