zoukankan      html  css  js  c++  java
  • DB2--使用WITH AS(CTE)进行查询、递归失败的记录

      最近由于工作需要,使用的是DB2数据库存储数据,在这里记录一下使用WITH AS(也叫公共表达式CTE)递归查询机构数据碰到的问题。

    WITH AS使用需要列出详细的字段名

      我在DB2中使用CTE时,需要在CTE的名字旁带上所需的列名,需要多少列,就写出多少列,如下是:

      错误写法:

      正确写法:

    WITH ORG_INFO_PROCESS(RAW_ORG_ID,ORG_ID,SUP_ID) AS
    (
    SELECT ORG.ORG_ID AS RAW_ORG_ID,ORG.ORG_ID,ORG.SUP_ID FROM ORG_INFO ORG
    )SELECT * FROM ORG_INFO_PROCESS ORDER BY RAW_ORG_ID,ORG_ID

      CTE表达式名后面跟上具体的列名才是正确的写法

    递归调用CTE时不能使用JOIN,必须使用多表内连接

      我在DB2中使用CTE时,由于查询机构的所有上级机构需要递归该CTE,于是就使用了JOIN,结果还是报错,后来换成多表内连接查询才成功,如下:

      错误写法:

      正确写法:

    WITH ORG_INFO_PROCESS(RAW_ORG_ID,ORG_ID,SUP_ID) AS
    (
    SELECT ORG.ORG_ID AS RAW_ORG_ID,ORG.ORG_ID,ORG.SUP_ID FROM ORG_INFO ORG
    UNION ALL 
    SELECT ORG2.RAW_ORG_ID,ORG1.ORG_ID,ORG1.SUP_ID 
    FROM ORG_INFO_PROCESS ORG2,ORG_INFO ORG1
    WHERE ORG2.SUP_ID=ORG1.ORG_ID )SELECT * FROM ORG_INFO_PROCESS ORDER BY RAW_ORG_ID,ORG_ID

      在DB2中CTE递归只能使用【select * FROM table1,table2 where 关联条件】才符合查询。

  • 相关阅读:
    BZOJ2301——莫比乌斯&&整除分块
    2019HDU多校第五场A fraction —— 辗转相除法|类欧几里得
    AKS素性检测
    2019牛客多校B generator 1——十进制快速幂
    BZOJ 3884——欧拉降幂和广义欧拉降幂
    libevent HTTP client 的实现
    google proto buffer安装和简单示例
    setenv LD_LIBRARY_PATH
    Centos6.4下安装protobuf及简单使用
    lrzsz
  • 原文地址:https://www.cnblogs.com/lovelyli/p/13630958.html
Copyright © 2011-2022 走看看