在oracle中递归查询

阿克舒比娅

我在Oracle中有两个表来获取软件版本

RequiredVersion Table
major minor maintenance requiredversion
20      0      0         20.0.1
20      0      1         20.0.3
20      0      3          null
20      0      4          null
20      0      2         20.0.5
20      0      5          null
20      0      6          null

OptimumVersion Table
major minor maintenance optimumver
20      0       0          20.0.2
20      0       2          20.0.6
20      0       1          20.0.4 

用户将发送我正在拆分的版本的输入20.0.0,并与两个表中的主要次要版本和维护版本进行比较。我如何获取所有依赖项,即所需版本和最佳版本

I/P       20.0.0
O/p       20.0.1
          20.0.2
          20.0.3
          20.0.4
          20.0.5
          20.0.6

我得到的每个版本可能有也可能没有要求的最佳版本。我尝试使用查询进行了很多尝试,但没有获得如何在循环中调用的方法。请帮助我解决此问题。

Structure :                20.0.0 
                         /        \ 
        (reqver)   20.0.1          20.0.2 (optimumvers) 
                  /     \          /     \ 
            20.0.3     20.0.4    20.0.5   20.0.6
           (reqver)   (optver)  (req)      (opt) 

提前致谢

彼得佩波

样本数据

-- Data preparation
CREATE TABLE REQUIRED_VERSION
  (
    MAJOR           NUMBER(3),
    MINOR           NUMBER(3),
    MAINTENANCE     NUMBER(3),
    REQUIREDVERSION VARCHAR2(11)
  );

CREATE TABLE OPTIMUM_VERSION
  (
    MAJOR          NUMBER(3),
    MINOR          NUMBER(3),
    MAINTENANCE    NUMBER(3),
    OPTIMUMVERSION VARCHAR2(11)
  );

-- Data
Insert into OPTIMUM_VERSION (MAJOR,MINOR,MAINTENANCE,OPTIMUMVERSION) values ('20','0','0','20.0.2');
Insert into OPTIMUM_VERSION (MAJOR,MINOR,MAINTENANCE,OPTIMUMVERSION) values ('20','0','2','20.0.6');
Insert into OPTIMUM_VERSION (MAJOR,MINOR,MAINTENANCE,OPTIMUMVERSION) values ('20','0','1','20.0.4');

Insert into REQUIRED_VERSION (MAJOR,MINOR,MAINTENANCE,REQUIREDVERSION) values ('20','0','0','20.0.1');
Insert into REQUIRED_VERSION (MAJOR,MINOR,MAINTENANCE,REQUIREDVERSION) values ('20','0','1','20.0.3');
Insert into REQUIRED_VERSION (MAJOR,MINOR,MAINTENANCE,REQUIREDVERSION) values ('20','0','3',null);
Insert into REQUIRED_VERSION (MAJOR,MINOR,MAINTENANCE,REQUIREDVERSION) values ('20','0','4',null);
Insert into REQUIRED_VERSION (MAJOR,MINOR,MAINTENANCE,REQUIREDVERSION) values ('20','0','2','20.0.5');
Insert into REQUIRED_VERSION (MAJOR,MINOR,MAINTENANCE,REQUIREDVERSION) values ('20','0','5',null);
Insert into REQUIRED_VERSION (MAJOR,MINOR,MAINTENANCE,REQUIREDVERSION) values ('20','0','6',null);

询问

SELECT DISTINCT DEPENDENCY
FROM (
  SELECT VERSION,DEPENDENCY
  FROM (
    SELECT MAJOR||'.'||MINOR||'.'||MAINTENANCE AS VERSION, REQUIREDVERSION AS DEPENDENCY FROM REQUIRED_VERSION
    UNION
    SELECT MAJOR||'.'||MINOR||'.'||MAINTENANCE AS VERSION, OPTIMUMVERSION AS DEPENDENCY FROM OPTIMUM_VERSION
  )
  START WITH VERSION = '20.0.0' -- Put your version number here
  CONNECT BY PRIOR DEPENDENCY = VERSION AND DEPENDENCY IS NOT NULL
)
ORDER BY DEPENDENCY ASC;

解决方案由3个嵌套查询组成,从最深层解释开始。

  1. 用点将主要,次要,维护版本连接起来,以使与所需版本(varchar2)相同的处理方式变得更轻松。将两个表合并为一个表(显然,依赖表由您分为两部分)
  2. 分层查询-听起来像什么。对于具有依赖关系的每一行,都将创建一个“根”并加载其依赖关系(如果有的话)
  3. 过滤器的结果仅显示每个依赖项一次(以防它们是两个相互依赖的版本)。订单以升序排列。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在oracle中递归查询

来自分类Dev

Oracle递归查询(比较分组数据中的时间戳)

来自分类Dev

递归查询设计 - Oracle SQL

来自分类Dev

PostgreSQL中的递归查询?

来自分类Dev

Mongodb中的递归查询

来自分类Dev

GRAQL中的递归查询?

来自分类Dev

PostgreSQL中的递归查询?

来自分类Dev

Prolog查询中的递归

来自分类Dev

Oracle中的递归查询,直到层次结构中的父级满足条件为止?

来自分类Dev

Oracle Connect By Prior提供递归查询语法

来自分类Dev

Oracle递归查询按数据循环连接

来自分类Dev

如何避免递归Oracle SQL查询

来自分类Dev

递归WITH查询在oracle中是如何工作的?什么时候进入循环?

来自分类Dev

在递归查询中检测周期

来自分类Dev

PostgreSQL中的递归查询。选择 *

来自分类Dev

在SQL中实现递归查询

来自分类Dev

Postgres中的递归SQL查询

来自分类Dev

Postgres中总和的递归查询

来自分类Dev

LINQ中的递归/层次查询

来自分类Dev

BigQuery中的递归/分层查询

来自分类Dev

Mysql中的递归SELECT查询?

来自分类Dev

Postgres中的递归SQL查询

来自分类Dev

SPARQL中的递归查询的定义

来自分类Dev

Google Spanner 中的递归查询?

来自分类Dev

从递归查询错误中查看

来自分类Dev

在Oracle中更新查询

来自分类Dev

Oracle 中的动态查询

来自分类Dev

在 ORACLE 中查询以优化

来自分类Dev

递归查询中的SQL Server更新