当前位置: 代码迷 >> Oracle开发 >> ORACLE查询解决思路
  详细解决方案

ORACLE查询解决思路

热度:34   发布时间:2016-04-24 06:51:52.0
ORACLE查询
表TB1:里面有个字段是另外一个表TB2的ID字符串组,用,号分开的,比如1,2,3,4

问题:如何根据TB1的这个ID列字段查询出TB2ID对应的用户名,并且也是用,号分开

比如

TB1 字段  TID 1,2,3,4
TB2
1 用户名1
2 用户名2
3 用户名3
4 用户名4

查询出来要组成这样  用户名1,用户名2,用户名3,用户名4

ORACLE

------解决方案--------------------
你第一次给我们的数据TB1和TB2刚好相反啊,
如下:

SELECT T3.ID, LTRIM(MAX(SYS_CONNECT_BY_PATH(T3.NAME, ',')), ','), T3.MEMO
  FROM (SELECT ROW_NUMBER() OVER(PARTITION BY T2.RNUM ORDER BY T1.NAME) RN,
               T1.NAME,
               T2.RNUM,
               T2.ID,
               T2.MEMO
          FROM TB1 T1,
               (SELECT T.ID,
                       T.RNUM,
                       REGEXP_SUBSTR(T.TB1ID, '[^,]+', 1, LEVEL) STR,
                       T.MEMO
                  FROM (SELECT T.ID, T.TB1ID, ROWNUM RNUM, T.MEMO FROM TB2 T) T
                CONNECT BY LEVEL <=
                           (LENGTH(T.TB1ID) -
                           LENGTH(REPLACE(T.TB1ID, ',', ''))) / LENGTH(',') + 1
                       AND PRIOR RNUM = RNUM
                       AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL) T2
         WHERE T1.ID = T2.STR) T3
 START WITH T3.RN = 1
CONNECT BY PRIOR RN = RN - 1
       AND PRIOR T3.RNUM = T3.RNUM
 GROUP BY T3.RNUM, T3.ID, T3.MEMO;



还不行????
  相关解决方案