zoukankan      html  css  js  c++  java
  • 自连接表:M可能无下级,可能有下级

    create table TEMP_A
    (
      id        NUMBER,
      parent_id NUMBER,
      text      VARCHAR2(10),
      type      CHAR(1)
    );
    insert into TEMP_A (ID, PARENT_ID, TEXT, TYPE) values (1, null, null, 'M');
    insert into TEMP_A (ID, PARENT_ID, TEXT, TYPE) values (2, 1, 'b', 'S');
    insert into TEMP_A (ID, PARENT_ID, TEXT, TYPE) values (3, null, null, 'M');
    insert into TEMP_A (ID, PARENT_ID, TEXT, TYPE) values (4, null, 'd', 'S');
    insert into TEMP_A (ID, PARENT_ID, TEXT, TYPE) values (5, 3, 'e', 'S');
    insert into TEMP_A (ID, PARENT_ID, TEXT, TYPE) values (6, null, 'f', 'M');
    insert into TEMP_A (ID, PARENT_ID, TEXT, TYPE) values (7, 3, 'g', 'S');
    insert into TEMP_A (ID, PARENT_ID, TEXT, TYPE) values (8, null, 'h', 'B');
    
    SQL> select t.* from TEMP_A t;
    
            ID  PARENT_ID TEXT       TYPE
    ---------- ---------- ---------- ----
             1                       M
             2          1 b          S
             3                       M
             4            d          S
             5          3 e          S
             6            f          M
             7          3 g          S
             8            h          B
    
    8 rows selected
    
    SELECT *  FROM TEMP_A m LEFT JOIN temp_a s ON m.id=s.parent_id AND s.type='S' AND s.parent_id IS NOT NULL WHERE m.type='M';
    
    -- 直接带出
    SELECT m.id,
    (CASE WHEN m.parent_id IS NULL THEN s.id ELSE m.parent_id END) AS s_id,
    (CASE WHEN m.text IS NULL THEN s.text ELSE m.text END) AS text
     FROM TEMP_A m LEFT JOIN temp_a s ON m.id=s.parent_id AND s.type='S' WHERE m.type='M';
    
    -- 把id做为一个虚拟表使用
    SELECT (CASE WHEN s.id IS NULL THEN m.id ELSE s.id END) AS s_id
    ,(CASE WHEN s.parent_id IS NULL THEN m.id ELSE s.parent_id END) AS m_id
     FROM TEMP_A m LEFT JOIN temp_a s ON m.id=s.parent_id AND s.type='S' AND s.parent_id IS NOT NULL WHERE m.type='M';
  • 相关阅读:
    %和format的区别
    C++ 使用 curl 进行 http 请求(GET、POST、Download)的封装
    C++ log4cplus 类库的封装
    linux top 命令
    python使用urllib2 http 下载参数的try catch
    C 小白的 thrift 环境搭建
    pandas 必背函数操作
    flask + MySQL-python 创建 webapp 应用
    python 的 virtualenv 环境搭建及 sublime 手动创建运行环境
    nginx proxy_pass指令’/’注意事项
  • 原文地址:https://www.cnblogs.com/Tty725/p/13266553.html
Copyright © 2011-2022 走看看